像运算符regex不能在Posgresql中按预期方式工作

时间:2018-10-17 13:52:41

标签: sql regex postgresql

我表中有以下数据

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服务器上工作正常,但在Pogresql中我们无法使用[1-2]来找出该位置的期望数字。关于Posgresql如何实现的任何建议或想法。

2 个答案:

答案 0 :(得分:1)

您可以使用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)-CDCD
  • [1-2]-12
  • [0-9]--一个数字后跟-
  • %-直到记录末尾的任何文本。

答案 1 :(得分:0)

使用正则表达式运算符itog$GOODS_NAME МАКФА макар УЛИТКИ 450г ,并将逻辑更改为:

~

注意:

  • 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应该用单引号引起来吗?如果您想要字符串,它们应该是。
  • 正则表达式不会自动定位到字符串的开头,因此不需要通配符。