私はSQLの2つのvarcharを比較したいと考えています。1つはCafe
のようなもので、もう1つはCafé
は2つの値を比較できるSQLの方法です。例えば:
SELECT *
FROM Venue
WHERE Name Like '%cafe%'
Big Bobs Café Extraordinaire
という名前の会場がある場合、結果セットに含まれますか?
アクセントを区別しない強制 照合
また、テーブル変数または一時テーブルのvarchar列と比較する場合は、エラーまたはさらなる強制を回避するために、両側で同じ照合順序を確保する必要があります。
そして、定数値はデータベースの照合順序を持つためUpdate:ローカル変数のみで、定数ではありません いや、そうでもない
SELECT *
FROM Venue
WHERE
Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
特定のアクセントを区別しない collation を選択に適用することにより:
SELECT *
FROM Venue
WHERE Name COLLATE Latin1_General_CI_AI Like '%cafe%' COLLATE Latin1_General_CI_AI
CIは「Case Insensitive」の略で、AIは「Accent Insensitive」の略です。
アクセントセンシティブ検索とアクセントインセンシティブ検索は、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」に等しくなります。
queryは次のようになります。
SELECT * FROM Venue WHERE Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI
期待される結果は次のとおりです。
Id name
1 Café
2 Cafe
if 'A' COLLATE SQL_Latin1_General_CP1_CS_AS = 'a' COLLATE SQL_Latin1_General_CP1_CS_AS SELECT N'Yes 'ELSE SELECT N'No'