表中有以下数据

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]-12
[0-9]--后跟-的数字
%-记录结束前的任何文本。

关于sql - 像运算符regex不能在Postgresql中按预期方式工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52856576/

10-12 23:34