当前位置: 首页 > 面试题库 >

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

裴育
2023-03-14
问题内容

询问

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

有时无法找到小写和大写之间的重复项。
例如:sunny并且Sunny不显示为重复项。
因此,如何在PostgreSQL中找到两列的所有可能重复项。


问题答案:

[lower()](http://www.postgresql.org/docs/current/interactive/functions-

string.html#FUNCTIONS-STRING-SQL)/
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

这不会去除非字母。添加regexp_replace()像@Craig提到的那样:

SELECT lower(unaccent(regexp_replace('$s^o&f!t B眉脽ercaf茅', '\W', '', 'g') ))
                                                                     AS norm

结果:

softbusercafe


 类似资料:
  • 它有时无法在小写和大写之间找到重复项。 例如:和不显示为重复项。 那么如何在PostgreSQL中为两列找到所有可能的重复项。

  • 问题内容: 我有一个人员,我想查找重复的条目,以约束除以外的所有字段。因此,请使用-method(并因此使用),因为它们已考虑在内。 修改和方法以忽略该字段不是一种选择,因为代码的其他部分依赖于此。 如果我想忽略该字段,Java中最有效的方法是对重复项进行分类? 问题答案: 构建一个以实现您的自然键排序,然后使用基于二进制搜索的重复数据删除。即可为您提供这种能力。 请注意,必须满足通常的反对称性,

  • 问题内容: 忽略大小写,比较Python中字符串的最简单方法是什么? 当然可以做到(str1.lower()<= str2.lower())等,但这会创建两个附加的临时字符串(明显的alloc / gc开销)。 我想我正在寻找一个等效于C的stricmp()。 [请求更多上下文,所以我将用一个简单的示例进行演示:] 假设您要排序一个完整的字符串列表。您只需执行List.sort()。这是O(n *

  • 问题内容: 我有一个列表,其中包含代表动物名称的字符串。我需要对列表进行排序。如果使用,它将首先使用大写字符串然后使用小写形式提供列表输出。 但是我需要下面的输出。 输入: 输出: 问题答案: 该方法和功能迈出了关键的参数: 为每个值调用名为in的函数,并在排序时使用返回值,而不会影响实际值: 要在之前进行排序,您必须在键中包含更多信息,以便以给定的顺序对相等的值进行排序: 为和为生成更复杂的密钥

  • 我想既然查询的语法是: 查询的语法是 忽略案例集合查询的语法为: 但这似乎不起作用(它仍然区分大小写)。 想法? 编辑: 它也不是。

  • 问题内容: 是否可以确定String是否包含字符串模式?我想知道当字符不区分大小写时是否有可能。如果是这样,怎么办? 问题答案: 您可以使用 检查CharSequence是否包含搜索CharSequence(不区分大小写),处理为null。不区分大小写由String.equalsIgnoreCase(String)定义。 空的CharSequence将返回false。 这将比regex更好,因为