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 次 |
最近记录: |