Size: a a a

pgsql – PostgreSQL

2021 January 19

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Андрей Агеев
можно пронумеровать записи
row_number() over(
partition by tp_id
order by доп. приоритет
) и удалить все где номер > 1
Наоборот, они и нужны 🤔
Вывести оригинал и дубликат
источник

W

Warstone in pgsql – PostgreSQL
Переименовать. Или сразу другое имя давать.
источник

K

Kirill in pgsql – PostgreSQL
Всем привет! Помогите в работе с регулярками плиз. Необходимо заменить все непробельные символы между первым и последним пробелом в строке на *. Я нашел регулярку, которая их извлекает, но как заменить каждый символ а не все разом не знаю.
SELECT    *,
     substring(n, '\S+ (.*) \S+'), -- заменить каждый непробельный символ на *
     regexp_replace(n, substring(n, '\S+ (.*) \S+'), '*')
FROM    (VALUES('Раз двА ТРи 4 пять')) AS foo(n)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Kirill
Всем привет! Помогите в работе с регулярками плиз. Необходимо заменить все непробельные символы между первым и последним пробелом в строке на *. Я нашел регулярку, которая их извлекает, но как заменить каждый символ а не все разом не знаю.
SELECT    *,
     substring(n, '\S+ (.*) \S+'), -- заменить каждый непробельный символ на *
     regexp_replace(n, substring(n, '\S+ (.*) \S+'), '*')
FROM    (VALUES('Раз двА ТРи 4 пять')) AS foo(n)
тяжеловато, конечно
SELECT *
    , regexp_replace(n, '^\S+ (.*) \S+$', '\1') middle -- заменить каждый непробельный символ на *
    , regexp_replace(n, '^(\S+ ).*( \S+)$', '\1'||repeat('*', length(regexp_replace(n, '^\S+ (.*) \S+$', '\1')))||'\2') replaced
FROM (VALUES('Раз двА ТРи 4 пять')) AS foo(n);
источник

K

Kirill in pgsql – PostgreSQL
Victor Yegorov
тяжеловато, конечно
SELECT *
    , regexp_replace(n, '^\S+ (.*) \S+$', '\1') middle -- заменить каждый непробельный символ на *
    , regexp_replace(n, '^(\S+ ).*( \S+)$', '\1'||repeat('*', length(regexp_replace(n, '^\S+ (.*) \S+$', '\1')))||'\2') replaced
FROM (VALUES('Раз двА ТРи 4 пять')) AS foo(n);
Большое спасибо, буду разбираться
источник

K

Kirill in pgsql – PostgreSQL
@vyegorov подскажите пожалуйста, что обозначают \1 и \2 ?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
номера групп ( обозначаются скобками в основной регулярке )
https://www.postgresql.org/docs/current/functions-matching.html#POSIX-ATOMS-TABLE
источник

K

Kirill in pgsql – PostgreSQL
спасибо
источник

W

Warstone in pgsql – PostgreSQL
Victor Yegorov
тяжеловато, конечно
SELECT *
    , regexp_replace(n, '^\S+ (.*) \S+$', '\1') middle -- заменить каждый непробельный символ на *
    , regexp_replace(n, '^(\S+ ).*( \S+)$', '\1'||repeat('*', length(regexp_replace(n, '^\S+ (.*) \S+$', '\1')))||'\2') replaced
FROM (VALUES('Раз двА ТРи 4 пять')) AS foo(n);
SELECT source[1] || repeat('*', length(source[2])) || source[3] FROM regexp_match('Раз двА ТРи 4 пять', '([^\s]*)\s+(.*?)\s+([^\s]*)') AS source;
источник

VY

Victor Yegorov in pgsql – PostgreSQL
\S* == [^\s]*
источник

W

Warstone in pgsql – PostgreSQL
Тем более...
источник

W

Warstone in pgsql – PostgreSQL
Kirill
Всем привет! Помогите в работе с регулярками плиз. Необходимо заменить все непробельные символы между первым и последним пробелом в строке на *. Я нашел регулярку, которая их извлекает, но как заменить каждый символ а не все разом не знаю.
SELECT    *,
     substring(n, '\S+ (.*) \S+'), -- заменить каждый непробельный символ на *
     regexp_replace(n, substring(n, '\S+ (.*) \S+'), '*')
FROM    (VALUES('Раз двА ТРи 4 пять')) AS foo(n)
SELECT source[1] || repeat('*', length(source[2])) || source[3] FROM regexp_match('Раз двА ТРи 4 пять', '(\S*)\s+(.*?)\s+(\S*)') AS source;
источник

VY

Victor Yegorov in pgsql – PostgreSQL
и там явные пробелы нужны. и зацепиться к началу-концу строки. и за-LATERAL-ить это всё. но да, так лучше
источник

K

Kirill in pgsql – PostgreSQL
Warstone
SELECT source[1] || repeat('*', length(source[2])) || source[3] FROM regexp_match('Раз двА ТРи 4 пять', '(\S*)\s+(.*?)\s+(\S*)') AS source;
Спасибо
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Kirill
Всем привет! Помогите в работе с регулярками плиз. Необходимо заменить все непробельные символы между первым и последним пробелом в строке на *. Я нашел регулярку, которая их извлекает, но как заменить каждый символ а не все разом не знаю.
SELECT    *,
     substring(n, '\S+ (.*) \S+'), -- заменить каждый непробельный символ на *
     regexp_replace(n, substring(n, '\S+ (.*) \S+'), '*')
FROM    (VALUES('Раз двА ТРи 4 пять')) AS foo(n)
А получиться-то из 'Раз двА ТРи 4 пять' должно что?
Раз ********* пять
-- или
Раз *** *** * пять

Вы же написали "заменить все непробельные символы...", как правильно (вот поэтому лучше ожидаемый результат показывать, IMHO)?
источник

K

Kirill in pgsql – PostgreSQL
Yaroslav Schekin
А получиться-то из 'Раз двА ТРи 4 пять' должно что?
Раз ********* пять
-- или
Раз *** *** * пять

Вы же написали "заменить все непробельные символы...", как правильно (вот поэтому лучше ожидаемый результат показывать, IMHO)?
Второй вариант в вашем примере правильный, т. е. * должны быть через пробел
источник

W

Warstone in pgsql – PostgreSQL
Kirill
Второй вариант в вашем примере правильный, т. е. * должны быть через пробел
SELECT source[1] || ' ' || regexp_replace(source[2], '\S', '*', 'g') || ' ' || source[3] FROM regexp_match('Раз двА ТРи 4 пять', '(\S*)\s+(.*?)\s+(\S*)') AS source;

Тогда так.
источник

IC

Igor Chizhov in pgsql – PostgreSQL
Victor Yegorov
да не должно, это параметры сессии сбрасываются. а pg_stat_statements.max сколько у вас?
пробовали искать case-insensitive?
Да, case-insensitive, конечно, пробовал. pg_stat_statements.max не нашел как посмотреть,  я в Яндекс.Облаке
источник

K

Kirill in pgsql – PostgreSQL
Warstone
SELECT source[1] || ' ' || regexp_replace(source[2], '\S', '*', 'g') || ' ' || source[3] FROM regexp_match('Раз двА ТРи 4 пять', '(\S*)\s+(.*?)\s+(\S*)') AS source;

Тогда так.
Большое спасибо! Подскажите как вот это работает source[1]?
источник

W

Warstone in pgsql – PostgreSQL
regexp_match отдает массив из найденных элементов
источник