Sql server 搜索重音字符

Sql server 搜索重音字符,sql-server,diacritics,Sql Server,Diacritics,我四处寻找,发现了很多关于创建不区分重音的搜索的信息。这不是我想要的 一些强调的数据在我的UI中造成了问题,我希望做一些影响分析 有没有一种优雅的方法来搜索一个字段中的重音字符,而不是将许多不同的选择联合起来,每个选择中都有不同的字符?COLLATE子句更改了foo表达式,允许您单独分组 DECLARE @t TABLE (foo varchar(100)); INSERT @t VALUES ('bar'), ('bár'), ('xxx'), ('yyy'), ('foo'), ('foó

我四处寻找,发现了很多关于创建不区分重音的搜索的信息。这不是我想要的

一些强调的数据在我的UI中造成了问题,我希望做一些影响分析


有没有一种优雅的方法来搜索一个字段中的重音字符,而不是将许多不同的选择联合起来,每个选择中都有不同的字符?

COLLATE子句更改了foo表达式,允许您单独分组

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);
第一个给你一些实际值,而不仅仅是一个计数。但如果你有几个重音词,就不全是

对于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
选择
*
从…起
( 
挑选
第一个值(foo)超过(按foo-COLLATE-Latin1\u-General\u-CI\u-AI顺序划分,按foo-COLLATE-Latin1\u-General\u-CI\u-AS)作为safeFoo,
福
从…起
@t
)X
哪里
safeFoo-foo

第一个和第三个依赖于非重音字符在重音字符之前的排序

我不想得到个人数。我只需要一个特定列有重音字符的行总数。然后修改第二个。使用COLLATE仍然适用。
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