我表中有以下数据
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 :(得分:3)
效果很好。但是,出于某种原因,您认为LIKE
支持字符类和其他类似正则表达式的功能。在Postgres中,或者在除SQL Server,Sybase和MS Access之外的任何其他数据库中,都不是真的。
只需使用正则表达式即可。
对于原始版本:
SELECT *
FROM Customers
WHERE Customerid ~ '^[1-2][1-1]';
对于已编辑的版本:
SELECT *
FROM Customers
WHERE Customerid ~ '[-].{3}[1-2]1';
答案 1 :(得分:3)
您实际上可以通过一些工作使当前的逻辑与LIKE
一起工作:
SELECT *
FROM Customers
WHERE Customerid LIKE '11%' OR Customerid LIKE '21%';
您似乎正在使用SQL Server或Sybase增强的LIKE
语法。 Postgres不支持此功能,但是它支持自己的~
正则表达式运算符。有关更多信息,请参见戈登的答案。
对问题的修改可以使用以下方法:
SELECT *
FROM Customers
WHERE Customerid ~ '-[^-]{3}[1-2]7';
答案 2 :(得分:0)
与SIMILAR TO一起使用,而不是像。选择col1,如果col1与'%-AB([CD] | CD)[1-2] [0-9]-%'类似,然后下注BET-结束表格thnx @WiktorStribiżew