2011-01-13 14 views
1

私は、全国文字のペット名を含む列を持っています。どのようにしてそれらを1つの条件で一致させるためのクエリを記述しますか?ここFLATTENのfuncitonのようなSQL Server内の国別文字を平滑化

|PetName| 

    Ćin 
    ćin 
    Ĉin 
    ĉin 
    Ċin 
    ċin 
    Čin 
    čin 

STHは:

...WHERE LOWER(FLATTEN(PetName)) = 'cin' 

NVARCHARからVARCHARまでにキャストしようとしましたが、それは助けにはなりませんでした。すべての文字にREPLACEを使用しないでください。

+0

select lower(キャスト(N'Chasas 'as varchar))がうまく動作します。データベースの照合順序はどのように設定されていますか? –

+0

@マークPMあなたが書いたものは私のためには機能しません、照合が何であるかわからない、私はそれを確認できます –

答えて

6

これは動作するはずキリル文字照合ベースケース理由などDJ、Z、C、C、S、などのすべての発音区別符号...

declare @t table(PetName nvarchar(100)) 
insert into @t 
SELECT N'Ćin' union all 
SELECT N'ćin' union all 
SELECT N'Ĉin' union all 
SELECT N'ĉin' union all 
SELECT N'Ċin' union all 
SELECT N'ċin' union all 
SELECT N'Čin' union all 
SELECT N'čin' 

SELECT * 
FROM @t 
WHERE lower(PetName) = 'cin' COLLATE Cyrillic_General_CS_AI 
2

あなたは比較のために使用される照合順序を変更することができます

WHERE PetName COLLATE Cyrillic_General_CI_AI = 'cin' 
+1

@Mladen Prajdic :あなたの答えに使用されている照合を借りました。人々はMladenに投票しなければなりません! –

0

実際にアクセントを文字から取り除く方法や組み込み関数はありません。 比較(LIKE、IN、PATINDEXなど)を行っている場合、カラム/ dbがアクセントの影響を受けていない場合は、強制的にCOLLATEを実行できます。デフォルトの照合は、(あなたがそれを変更しない限り)鈍感であるため、

通常、この

with test(col) as (
select 'Ćin' union all 
select 'ćin') 
select * from test 
where col='cin' 

のようなクエリでは、両方の列を返します。しかしこれはFULLTEXTインデックスでは機能しません。

関連する問題