表中有以下数据
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中如何实现的任何建议或想法。
最佳答案
您可以使用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
-an-AB
子字符串([CD]|CD)
-aC
,或D
,或CD
[1-2]
-1
或2
[0-9]-
-后跟-
的数字%
-记录结束前的任何文本。关于sql - 像运算符regex不能在Postgresql中按预期方式工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52856576/