Gho*_*man 7 sql postgresql case-insensitive duplicates pattern-matching
SELECT COUNT(*), name, number
FROM tbl
GROUP BY name, number
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)
它有时无法在小写和大写之间找到重复.
例如:sunny并且Sunny不会显示为重复项.
那么如何在PostgreSQL中为两列找到所有可能的重复项.
Erw*_*ter 16
lower()/ upper()使用其中一个将字符折叠为大写或小写.特殊字符不受影响:
SELECT count(*), lower(name), number
FROM tbl
GROUP BY lower(name), number
HAVING count(*) > 1;
Run Code Online (Sandbox Code Playgroud)
unaccent()如果你真的想忽略变音符号,就像你的评论所暗示的那样,安装附加模块unaccent,它提供了一个删除重音的文本搜索字典以及通用功能unaccent():
CREATE EXTENSION unaccent;
Run Code Online (Sandbox Code Playgroud)
使它非常简单:
SELECT lower(unaccent('Büßercafé')) AS norm
Run Code Online (Sandbox Code Playgroud)
结果:
busercafe
Run Code Online (Sandbox Code Playgroud)
这不会删除非字母.regexp_replace()像@Craig那样添加:
SELECT lower(unaccent(regexp_replace('$s^o&f!t Büßercafé', '\W', '', 'g') ))
AS norm
Run Code Online (Sandbox Code Playgroud)
结果:
softbusercafe
Run Code Online (Sandbox Code Playgroud)
您甚至可以在其上构建功能索引:
| 归档时间: |
|
| 查看次数: |
10859 次 |
| 最近记录: |