Как сопоставить шаблон с регулярным выражением в PosgreSQL? - PullRequest
0 голосов
/ 03 апреля 2019

В моем PostgreSQL в моем столбце есть два вида записей:
ABCD-XYZE12-G56 и ABCD-XYZE-G56.

В обоих я хочу избавиться от G56 и выбрать каждый отдельно.

Итак, мой запрос для поиска (BCD-XYZE12):

SELECT SUBSTRING(string, '[A-Z]+-[A-Z0-9]+') from table;

Но он также соответствует: ABCD-XYZE.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Чтобы удалить определенную часть строки, я бы предложил использовать regexp_replace(). Чтобы сопоставить строку после применения regexp_replace(), вы можете использовать оператор ~ в предложении WHERE.

Оператор ~ является оператором сопоставления регулярных выражений POSIX. Документация PostgreSQL здесь .

Например:

SELECT *
FROM
(
    SELECT REGEXP_REPLACE(string, '-G56', '') str
    FROM test
) t
WHERE t.str ~ 'BCD-XYZE12'
;

SQLFiddle , чтобы увидеть некоторые рабочие примеры.

0 голосов
/ 03 апреля 2019

Попробуйте Regex: ^[A-Z]+-(?=[A-Z0-9]*[0-9])[A-Z0-9]+, чтобы получить записи типа: ABCD-XYZE12

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...