搜索重音字符

时间:2013-05-21 12:36:14

标签: sql-server diacritics

我一直在四处寻找,并且我发现了很多关于创建重音不敏感搜索的信息。这不是我追求的目标。

一些重音数据导致我的UI出现问题,我正在寻求进行一些影响分析。

是否有一种优雅的方式来搜索字段中的任何重音字符,而不是在每个字符中合并许多不同的字符?

1 个答案:

答案 0 :(得分:0)

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

第一和第三依赖于在重音字符

之前对非重音字符进行排序