Size: a a a

pgsql – PostgreSQL

2021 June 22

ac

alex che in pgsql – PostgreSQL
там дефисов нет известно где между цифрами? в этих 2 форматах?
если есть, то добавьте минусы в регулярку, сделайте 2 регулярки и между ними цепочку coalesce
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Да не должно быть, но, и не должно было быть DDMMYYYY, так что, я уж не уверен
источник

Ð

Ð in pgsql – PostgreSQL
но лучше опять таки не городить городушки, а написать нормальный императивный алгоритм с ифами в виде функции
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Если поделитесь ссылкой, было бы очень здорово
источник

Ð

Ð in pgsql – PostgreSQL
ссылкой на документацию? ключевые слова create function и control structures
источник

ac

alex che in pgsql – PostgreSQL
Ещё вариант — пятая-шестая (или первая-вторая) цифра должна быть в точности 19 или 20
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Это если ещё одну регулярку закинуть, чтобы в зависимости от начала тысячелетия одна или другая регулярка :?

Ну у меня только 20, так что можно, да, но как вогнать ещё одну регулярку и условие по выходу :?
источник

ac

alex che in pgsql – PostgreSQL
а напомните предыдущий вариант
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Благодарю!

Тут просто ещё фишка в том, что, хотелось бы. чтобы это был именно запрос, планируется использовать его там, по кд буквально.
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Регулярки :? или выражения :?
Если выражение, то

coalesce(to_date((regexp_match(msgid, '(\d{4,4}\d{2,2}\d{2,2})_-*')::text[])[1], 'YYYYMMDD'), '1970-01-01'::date) as dich
У меня вот так сейчас.
источник

Ð

Ð in pgsql – PostgreSQL
ну и в чем проблема, функцию вызывать? по ней даже индекс можно построить
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
её и не будет :D
У меня
2021 или 2020 только в годах
источник

ac

alex che in pgsql – PostgreSQL
coalesce(
to_date((regexp_match(msgid, '(\d{2,2}\d{2,2}20\d{2,2})_-*')::text[])[1], 'DDMMYYYY'),
to_date((regexp_match(msgid, '(20\d{2,2}\d{2,2}\d{2,2})_-*')::text[])[1], 'YYYYMMDD'),
'1970-01-01'::date) as dich
источник

ac

alex che in pgsql – PostgreSQL
сначала проверяем, что 5-6 цифры 20, если нет, то пробуем 1-2 цифры 20
источник

🌌[

🌌El.Randir/42ᅠ [AD]... in pgsql – PostgreSQL
Ля, Огромное спасибо!
источник

DO

Do c Tor O r` Ry in pgsql – PostgreSQL
используйте bigint,  а не int
источник

DO

Do c Tor O r` Ry in pgsql – PostgreSQL
на ваше число его хватит, а вообще decimal
источник

AC

All Cats in pgsql – PostgreSQL
Я и так использую бигинт, но все равно переполнение
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Значит, numeric (он же decimal).
источник

DO

Do c Tor O r` Ry in pgsql – PostgreSQL
ошибка же говорит про int. сделайте явное приведение тогда
postgres=# select 1::int+2639000000000000000::int;
ERROR:  integer out of range
postgres=# select 1::bigint+2639000000000000000::bigint;
     ?column?      
---------------------
2639000000000000001
(1 row)
источник