非字母数字的 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 TONOT SIMILAR TO seen here。

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

【讨论】:

以上是关于非字母数字的 PostgreSQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:一个查询,它计算字符串中所有非字母数字字符的出现次数

SQL Server 2008 查询以查找列中包含非字母数字字符的行

SQL通过忽略非字母和非数字来删除重复记录[关闭]

按数字排序,带字母的数字,然后是字母 PostgresQL

Postgresql中的large object

Postgresql字符串匹配在哪里