2009-08-03 18 views

答えて

103

SQL Serverデータベースの既定の構成では、文字列比較は、大文字と小文字を区別しません()。データベースがこの設定をオーバーライドする場合(代替照合を使用)、照会で使用する照合の種類を指定する必要があります。

SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS 

私が提供した照合は単なる例であることに注意してください。 SQL Serverの照合の詳細については、hereを参照してください。

2

を無視して戻って来てほしいですか? MS SQL Serverでは、データベース全体の設定です。または、COLLATEキーワードを使用してクエリごとにオーバーライドできます。

25

通常、文字列比較では大文字と小文字が区別されません。データベースが敏感な照合を小文字に設定されている場合は、大文字小文字を区別しないものを使用するように強制する必要があります。

SELECT balance FROM people WHERE email = '[email protected]' 
    COLLATE SQL_Latin1_General_CP1_CI_AS 
+3

誰かが私よりも速いように見えます:-) –

+4

+1私はあなたの簡単な(そしてスクロールバーなしの)答えをもっと気に入っていました。 –

4

あなたはそのようなvarbinary型にキャストし、大文字と小文字が区別を強制することができます

SELECT * FROM myTable 
WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal') 
+2

これは機能的ですが、これはお勧めできません。並べ替えと文字列の比較を管理する照合があります。 –

+0

@AdamRobinsonは "文字列の比較"についてはこれではありませんか? – Fandango68

19

私は他の場所で別の解決策を見つけた。つまり、

upper(@yourString) 

を使用するが、ここで誰もが、それはとにかくケースを無視しているため、SQL Serverで、それは問題ではない、と言っていますか?私たちのデータベースが大文字と小文字を区別していることは確かです。

+4

データベースが大文字と小文字を区別できるのは間違いありませんが、必要であってもこれはかなり非効率的です。 COLLATEは使用するキーワードです。 – mjaggard

+1

それを持ってくれてありがとう、@ mjaggard。あなた、または私の答えを落とすように見える人は、私のような答えを探して見つけた自分のような人のために精巧になることを願っています。 – Danny

+1

完全に合理的な説明であるので、これをアップしました。あまりにも多くのオーバーヘッドが発生します。文字列に文字列が含まれていて、照合順序がわからない場合はどうなりますか?ラテン語1は、厄介なコード体系です。あなたの文字列にアポストロフィがあると、意味のある結果が得られます(O'Brienのように)。 – eggmatters

5

いいえ、LIKEを使用すると動作しません。 LIKEは、指定したパターンと正確に一致する値を検索します。この場合、LIKEは 'someval'ではなく 'sOmeVal'というテキストのみを検索します。

実践的な解決策は、LCASE()機能を使用しています。 LCASE('sOmeVal')は、テキストの小文字の文字列 'someval'を取得します。あなたが比較の両側のために、この機能を使用する場合、それは動作します:あなたの「sOmeVal」「someval」(たとえば、「Somevalの他のすべての表記と一致するように

SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')

文は、2つの小文字の文字列を比較します'、' sOMEVA1 'など)。

+6

照合されたSQL Serverインストールの99.9%で、LIKEは大文字と小文字を区別しません。 – RichardTheKiwi

関連する問題