sql – 在两列中查找可能的重复项,忽略大小写和特殊字符

前端之家收集整理的这篇文章主要介绍了sql – 在两列中查找可能的重复项,忽略大小写和特殊字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
询问
SELECT COUNT(*),name,number
FROM   tbl
GROUP  BY name,number
HAVING COUNT(*) > 1

它有时无法在小写和大写之间找到重复.
例如:晴天和阳光不会显示为重复.
那么如何在Postgresql中为两列找到所有可能的重复项.

解决方法

lower()/ upper()

使用其中一个将字符折叠为大写或小写.特殊字符不受影响:

SELECT count(*),lower(name),number
FROM   tbl
GROUP  BY lower(name),number
HAVING count(*) > 1;

unaccent()

如果你真的想忽略变音符号,就像你的评论所暗示的那样,安装附加模块unaccent,它提供了一个删除重音的文本搜索字典以及通用功能unaccent():

CREATE EXTENSION unaccent;

使它非常简单:

SELECT lower(unaccent('Büßercafé')) AS norm

结果:

busercafe

这不会剥离非字母.添加像@Craig那样的regexp_replace():

SELECT lower(unaccent(regexp_replace('$s^o&f!t Büßercafé','\W','','g') ))
                                                                     AS norm

结果:

softbusercafe

您甚至可以在其上构建功能索引:

> Does PostgreSQL support “accent insensitive” collations?

原文链接:https://www.f2er.com/mssql/77644.html

猜你在找的MsSQL相关文章