Например, оператор регулярных выражений не работает должным образом в Posgresql - PullRequest
0 голосов
/ 17 октября 2018

У меня есть данные ниже в таблице

HJ-DEF-ABCF010-ABC18-09-17-D
GHJ-ABC-ABFV006-ABC18-09-18-R
OH-DEF-ABFCRT2037-ABC17-01-18-R

Я хочу заполнить значение в другом столбце, например

HJ-DEF-ABCF010-ABC18-09-17-D             BET
GHJ-ABC-ABFV006-ABD18-09-18-R            BET
OH-DEF-ABFCRT2037-ABCD17-01-18-R          BET

Как отображение для

ABC18 is BET   
ABD18 is BET
ABCD17 is BET

Я использовал приведенный ниже SQL-запрос для этого

select col1,case 
when col1 like '%-ABC[1-2][0-9]-%' then BET 
when col1 like '%-ABD[1-2][0-9]-%' then BET 
when col1 like '%-ABCD[1-2][0-9]-%' then BET
else - end form table

, который отлично работает в SQl Sever, но в Pogresql мы не можем использовать [1-2], чтобы узнать ожидаемую цифру в позиции.Любое предложение или идея, как достичь в Posgresql.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вы можете использовать SIMILAR TO, который будет очень близок к тому, что делает ваш LIKE, поскольку он допускает некоторые шаблоны регулярных выражений POSIX.Вы можете даже объединить шаблоны в 1 шаблон:

select col1,case 
when col1 SIMILAR TO '%-AB([CD]|CD)[1-2][0-9]-%' then BET
else - end from table

Детали

  • % - любые 0+ символов
  • -AB - подстрока -AB
  • ([CD]|CD) - либо C, либо D, либо CD
  • [1-2] - 1 или 2
  • [0-9]- - цифра, за которой следует -
  • % - любой текст до конца записи.
0 голосов
/ 17 октября 2018

Используйте оператор регулярного выражения ~ и измените логику на:

select col1,
       (case when col1 ~ '-ABC[1-2][0-9]-' then BET 
             when col1 ~ '-ABD[1-2][0-9]-' then BET 
             when col1 ~ '-ABCD[1-2][0-9]-' then BET
             else -
        end) 
from table

Примечания:

  • Если BET и - должны быть в одномцитаты?Они должны быть, если вы хотите строки.
  • Регулярные выражения не привязываются автоматически к началу строки, поэтому подстановочные знаки не нужны.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...