Объединить специальные символы со значениями столбцов на основе сопоставления с образцом в Postgres - PullRequest
1 голос
/ 03 марта 2020

У меня есть таблица со следующим столбцом в postgres

col1
C29[40
D1305_D1306delinsKK
E602C[20

Я хотел бы добавить строку 'p.' и закрывающие квадратные скобки в строке 1 и 3 элемента и «р.» к элементу row2.

Ожидаемый вывод:

col2
p.C29[40]
p.D1305_D1306delinsKK
p.E602C[20]

Я выполняю следующий запрос, который выполняется без ошибок, но ожидаемый вывод отсутствует.

SELECT  *,
        CASE     
                WHEN t.c LIKE 'p.?=[%'
                THEN 'p.'|| t.c || ']'

                ELSE 'p.'|| t.c

         END AS col2

FROM table;

1 Ответ

2 голосов
/ 03 марта 2020

Вы можете использовать два цепных REGEXP_REPLACE вызова:

SELECT REGEXP_REPLACE(REGEXP_REPLACE('C29[40', '^(.*\[\d+)$', 'p.\1]'), '^(?:p\.)?', 'p.')

См. regex demo # 1 и regex demo # 2 и PostgreSQL демо .

Детали шаблона

  • ^ - начало строки
  • (.*\[\d+) - группа 1 (\1): любые 0+ символов, как можно больше (.*), затем [ и 1+ цифры
  • $ - конец строки.

Шаблон ^(?:p\.)? соответствует необязательной подстроке p. в начале строки и, таким образом, либо добавляет p., либо заменяет p. на p. (таким образом, сохраняя его).

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