postgresql中的类似TO功能无法按预期工作

时间:2018-10-22 12:26:27

标签: postgresql

我正在使用以下代码进行计算

select column1 from tablename  where code  SIMILAR TO '%(-|_|–)EST[1-2][0-9](-|_)%'

对于此列值-CSEST190-KCY18-04-01-L,已通过条件,但实际上,我想忽略此类数据。 应当通过上述条件的正确值为

-CS-EST19-0-KCY18-04-01-L
-CS_EST19-0-KCY18-04-01-L

任何建议,如何避免这种混淆?

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用正则表达式,而不是使用SQL标准SIMILAR TO

select column1 from tablename  where code ~ '[_–-]EST[12][0-9][_-]'

请注意,这不必与完整字符串匹配,也不必在两端都添加.*(相当于%和{{1}中的LIKE }。之所以匹配,是因为下划线SIMILAR TO是单个通配符。

此外,我在方括号中切换了顺序,以使破折号成为最后一个字符。这样,它将被视为字符文字,而不是范围说明符。