我表中有以下数据
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如何实现的任何建议或想法。
答案 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)
-C
或D
或CD
[1-2]
-1
或2
[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
应该用单引号引起来吗?如果您想要字符串,它们应该是。