sql - 像运算符正则表达式在 Posgresql 中无法按预期工作
问题描述
我在表中有以下数据
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
- 一个-AB
子串([CD]|CD)
- 一个C
, 或D
, 或CD
[1-2]
-1
或2
[0-9]-
- 一个数字后跟-
%
- 直到记录末尾的任何文本。