regexp_matches столбец без результата в массиве / фигурных скобках

#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')