0

私は周りを見回しており、アクセントを区別しない検索の作成に関する多くの情報を見つけました. これは私が求めているものではありません。

一部の強調されたデータが UI で問題を引き起こしているため、影響分析を行う予定です。

それぞれに異なる文字を含む多くの異なる選択を結合する以外に、アクセント付きの文字をフィールドで検索するエレガントな方法はありますか?

4

1 に答える 1

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

1 番目と 3 番目は、アクセント付きの文字の前にアクセントのない文字を並べ替えることに依存しています。

于 2013-05-21T12:57:14.613 に答える