非字母数字的 PostgreSQL 查询
Posted
技术标签:
【中文标题】非字母数字的 PostgreSQL 查询【英文标题】:PostgreSQL Query for Non Alphanumeric 【发布时间】:2017-08-14 02:05:16 【问题描述】:我一直在 *** 上搜索有关如何查找具有特殊字符的单元格的查询。
我在另一个帖子上看到了这个
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。
【问题讨论】:
【参考方案1】:我不相信 Postgres LIKE
支持如下正则表达式:
WHERE DESCRIPTION NOT LIKE '%[a-zA-Z0-9 .-]%'
但您可以改为使用波浪号运算符来访问完整的正则表达式。 口头表达,我觉得你这里要的逻辑是:
找出任何不在字符串中存在一个或多个非字母数字字符的字符串。
使用覆盖整个字符串的正确模式的正则表达式模式:
SELECT DESCRIPTION
FROM ITEM
WHERE DESCRIPTION !~ '^.*[^A-Za-z0-9 .-].*$'
这将匹配包含一个或多个字符的任何描述,这些字符不是字母、数字、空格、点或破折号。
【讨论】:
【参考方案2】:Postgres 可以处理正则表达式,但它使用关键字 SIMILAR TO
和 NOT SIMILAR TO
seen here。
我想你想要的是
SELECT DESCRIPTION FROM ITEM WHERE DESCRIPTION NOT SIMILAR TO '%[a-zA-Z0-9 .-]%'
【讨论】:
以上是关于非字母数字的 PostgreSQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Oracle:一个查询,它计算字符串中所有非字母数字字符的出现次数