postgresql数据问题中的Like运算符条件
我在表格中有以下数据postgresql数据问题中的Like运算符条件,sql,sql-server,postgresql,Sql,Sql Server,Postgresql,我在表格中有以下数据 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 BE
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 Server中运行良好,但在Pogresql中,我们无法使用[1-2]来查找位置中的预期数字。任何关于如何在Posgresql中实现的建议或想法。效果很好。然而,出于某种原因,您认为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';
实际上,您可以通过以下方法使当前逻辑正常工作:
SELECT *
FROM Customers
WHERE Customerid LIKE '11%' OR Customerid LIKE '21%';
您似乎正在使用SQL Server或Sybase增强型语法。Postgres不支持此操作,但它支持自己的~regex操作符。更多信息请参见戈登的答案
编辑您的问题时可以使用以下方法:
SELECT *
FROM Customers
WHERE Customerid ~ '-[^-]{3}[1-2]7';
与相似的而不是相似的一起使用。选择col1,当col1类似于“%-AB[CD]| CD[1-2][0-9]-%”时,选择大小写,然后选择else-end form table thnx@WiktorStribiżew如果要使用“%-|[1-2][0-9]”,因为%在这种情况下不起作用format@RamanSingh . . . 在问题被回答后改变它是不礼貌的,尤其是以使答案无效的方式。尽管如此,我已经更新了答案。我不想为此鲁莽。。。我想答案应该是%的替换率well@RamanSingh . . . 有人对答案投了否决票,大概是因为它不再符合问题的要求。@GordonLinoff不。你马上就投了反对票。我反驳了它。在where子句条件中的更正,请重新检查一下“-.{3}[1-2][7]”如果我们有像XXXXX-XXX18-08-17-D这样的数据,解决方案将不起作用。我想忽略这些数据,因为有效的XXXXX-XXX17-08-17-D是没有意义的。如果你用“-.{3}[1-2][0-9]”更改条件“-.{3}[1-2][7]”。在这种情况下,我不希望XXXXX-XXX18-08-17-D记录作为输出,因为我只想在此处比较子字符串XXX17。我已将新问题添加到场景中