加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:50:06 所属栏目:MsSql教程 来源:网络整理
导读:询问 SELECT COUNT(*),name,numberFROM tblGROUP BY name,numberHAVING COUNT(*) 1 它有时无法在小写和大写之间找到重复. 例如:晴天和阳光不会显示为重复. 那么如何在PostgreSQL中为两列找到所有可能的重复项. 解决方法 lower() / upper() 使用其中一个将字
询问
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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读