PostgreSQL查询非字母数字

时间:2017-08-14 02:05:16

标签: postgresql-9.2 pgadmin opensuse

我一直在搜索Stackoverflow,询问如何查找具有特殊字符的单元格。

我在另一篇文章中看到了这个

SELECT * FROM myTable WHERE myField LIKE '%[^a-zA-Z0-9]%'

并在下面输入我的代码

SELECT DESCRIPTION FROM ITEM WHERE DESCRIPTION NOT LIKE '%[a-zA-Z0-9 .-]%'

但是对于我来说,下面的结果显示' - '和'。'对我不起作用。和空白。

“2016 LANCER EX GT-A 2.0G CVT”

“2016 MIRAGE GLX 1.2G MT”

“2016 MIRAGE G4 GLX 1.2G MT(UPG)”

“2016 MIRAGE G4 GLX 1.2G CVT(UPG)”

我尝试将其更改为

SELECT DESCRIPTION FROM ITEM WHERE DESCRIPTION ~* '%[^a-zA-Z0-9 ]%'

返回0结果。

感谢任何帮助。我很困惑为什么它适用于其他人而不是我的。 我在Opensuse操作系统上使用Postgresql和PGadmin。

2 个答案:

答案 0 :(得分:1)

Postgres可以处理正则表达式,但是它使用关键字SIMILAR TONOT SIMILAR TO seen here

我想你想要的是 SELECT DESCRIPTION FROM ITEM WHERE DESCRIPTION NOT SIMILAR TO '%[a-zA-Z0-9 .-]%'

答案 1 :(得分:0)

我不相信Postgres LIKE支持如下所示的正则表达式:

WHERE DESCRIPTION NOT LIKE '%[a-zA-Z0-9 .-]%'

但您可以使用代字号运算符来访问完整的正则表达式。  口头表达,我认为你想要的逻辑是:

  

查找的字符串中包含一个或多个字母数字字符的字符串。

使用具有覆盖整个字符串的正确模式的正则表达式模式:

SELECT DESCRIPTION
FROM ITEM
WHERE DESCRIPTION !~ '^.*[^A-Za-z0-9 .-].*$'

这将匹配任何具有一个或多个字母,数字,空格,点或短划线的字符的描述。