查询
SELECT COUNT(*), name, number
FROM tbl
GROUP BY name, number
HAVING COUNT(*) > 1
有时无法找到小写和大写之间的重复项。
例如:sunny
和 Sunny
不会重复出现。
那么如何在 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é'));
结果:
busercafe
这不会去除非字母。添加 regexp_replace()
就像 @Craig 提到的那样:
SELECT lower(unaccent(regexp_replace('$s^o&f!t Büßercafé', '\W', '', 'g') ));
结果:
softbusercafe
您甚至可以在此基础上构建功能索引:
关于sql - 在忽略大小写和特殊字符的两列中查找可能的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12979390/