Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql数据问题中的Like运算符条件_Sql_Sql Server_Postgresql - Fatal编程技术网

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。我已将新问题添加到场景中