web-dev-qa-db-ja.com

SQL Serverでアクセントを区別しない比較(e、é、ê、ëを使用)を実行するにはどうすればよいですか?

私はSQLの2つのvarcharを比較したいと考えています。1つはCafeのようなもので、もう1つはCaféは2つの値を比較できるSQLの方法です。例えば:

SELECT *
FROM Venue
WHERE Name Like '%cafe%'

Big Bobs Café Extraordinaireという名前の会場がある場合、結果セットに含まれますか?

61
ilivewithian

アクセントを区別しない強制 照合

また、テーブル変数または一時テーブルのvarchar列と比較する場合は、エラーまたはさらなる強制を回避するために、両側で同じ照合順序を確保する必要があります。

そして、定数値はデータベースの照合順序を持つためUpdate:ローカル変数のみで、定数ではありません いや、そうでもない

SELECT *
FROM Venue
WHERE
   Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
94
gbn

特定のアクセントを区別しない collat​​ion を選択に適用することにより:

SELECT * 
FROM Venue 
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI

CIは「Case Insensitive」の略で、AIは「Accent Insensitive」の略です。

46
Mitch Wheat

アクセントセンシティブ検索とアクセントインセンシティブ検索は、Latin1_general_CI_AI

ここで、AIはAccent Insensitive、_ASはAccent Sensitive、つまりCaféCafeはAccent Insensitiveの場合は同じです。

以下のクエリLatin1_general_CI_AIは、次の部分に分類できます。

  • latin1は、サーバーが文字セットlatin 1、基本的にはASCIIを使用して文字列を処理するようにします。

  • [〜#〜] ci [〜#〜]は、大文字と小文字を区別しないことを指定するため、「ABC」は「abc」に等しくなります。

  • [〜#〜] ai [〜#〜]は、アクセントを区別しないように指定するため、「ü」は「u」に等しくなります。

queryは次のようになります。

SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

期待される結果は次のとおりです。

 Id  name
 1  Café
 2  Cafe
5
JINO SHAJI

if 'A' COLLATE SQL_Latin1_General_CP1_CS_AS = 'a' COLLATE SQL_Latin1_General_CP1_CS_AS SELECT N'Yes 'ELSE SELECT N'No'

1
Morteza Sefidi