我一直在搜索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。
答案 0 :(得分:1)
Postgres可以处理正则表达式,但是它使用关键字SIMILAR TO
和NOT 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 .-].*$'
这将匹配任何具有一个或多个不字母,数字,空格,点或短划线的字符的描述。