#sql #postgresql
#sql #postgresql
Вопрос:
Мне нужно извлечь # 6 цифр и поместить его в новый столбец с помощью Postgres.
Я разобрался с этим, но он возвращает результаты с фигурными скобками, которые, как я понимаю, являются результатами в массиве.
SELECT regexp_matches(input, '(# dddddd)') as output FROM table
Я хотел бы знать, как выводить результаты без фигурных скобок, и есть ли лучший способ написать регулярное выражение. Спасибо!
Комментарии:
1. Вы собираетесь сопоставлять несколько
#
символов в начале? Или долженсоответствовать фактическому знаку плюс во вводе
Ответ №1:
regexp_matches()
возвращает массив всех совпадений. Вы можете просто выбрать первый элемент этого массива
SELECT (regexp_matches(input, '(# dddddd)'))[1] as output
FROM table
Вы можете немного упростить регулярное выражение, используя a d{6}
для обозначения 6 цифр.
Комментарии:
1. Именно то, что мне было нужно! Спасибо!
Ответ №2:
Оба regexp_match()
и regexp_matches()
возвращают массивы.
Если вам просто нужна определенная подстрока, иногда я нахожу это regexp_replace()
более удобным:
select regexp_replace(input, '.*([0-9]{6}).*', '1')