【发布时间】:2013-05-16 05:31:15
【问题描述】:
我环顾四周,发现了很多关于创建不区分口音的搜索的信息。这不是我想要的。
一些重音数据导致我的 UI 出现问题,我希望进行一些影响分析。
有没有一种优雅的方法来搜索字段中的任何重音字符,而不是联合许多不同的选择,每个选择具有不同的字符?
【问题讨论】:
标签: sql-server diacritics
我环顾四周,发现了很多关于创建不区分口音的搜索的信息。这不是我想要的。
一些重音数据导致我的 UI 出现问题,我希望进行一些影响分析。
有没有一种优雅的方法来搜索字段中的任何重音字符,而不是联合许多不同的选择,每个选择具有不同的字符?
【问题讨论】:
标签: sql-server diacritics
COLLATE 子句更改 foo 表达式以允许您单独进行 GROUP BY
DECLARE @t TABLE (foo varchar(100));
INSERT @t VALUES ('bar'), ('bár'), ('xxx'), ('yyy'), ('foo'), ('foó'), ('foö');
SELECT
foo COLLATE Latin1_General_CI_AI,
MIN(foo COLLATE Latin1_General_CI_AS), MAX(foo COLLATE Latin1_General_CI_AS)
FROM
@t
GROUP BY
foo COLLATE Latin1_General_CI_AI
HAVING
MIN(foo COLLATE Latin1_General_CI_AS) <> MAX(foo COLLATE Latin1_General_CI_AS);
或者
SELECT
foo COLLATE Latin1_General_CI_AI,
COUNT(*)
FROM
@t
GROUP BY
foo COLLATE Latin1_General_CI_AI
HAVING
COUNT(*) > 1;
第一个给你一些实际值,而不仅仅是一个 COUNT。但如果您有多个重音词,则不是全部
对于 SQL Server 2012,你可以使用这个
SELECT
*
FROM
(
SELECT
FIRST_VALUE(foo) OVER (PARTITION BY foo COLLATE Latin1_General_CI_AI ORDER BY foo COLLATE Latin1_General_CI_AS) AS safeFoo,
foo
FROM
@t
) X
WHERE
safeFoo <> foo
第一个和第三个依赖于非重音字符在重音字符之前的排序
【讨论】: