gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:20:17 24 4
gpt4 key购买 nike

查询

SELECT COUNT(*), name, number
FROM tbl
GROUP BY name, number
HAVING COUNT(*) > 1

有时无法找到小写和大写之间的重复项。
例如:sunnySunny 不会重复出现。
那么如何在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com