"where" 句で大文字と小文字が区別されない SQL クエリ (MS SQL Server) を作成するにはどうすればよいですか?
SELECT * FROM myTable WHERE myField = 'sOmeVal'
大文字小文字を無視して結果を返してほしい
"where" 句で大文字と小文字が区別されない SQL クエリ (MS SQL Server) を作成するにはどうすればよいですか?
SELECT * FROM myTable WHERE myField = 'sOmeVal'
大文字小文字を無視して結果を返してほしい
SQL Server データベースの既定の構成では、文字列の比較では大文字と小文字が区別されません。データベースがこの設定をオーバーライドする場合 (代替照合を使用して)、クエリで使用する照合の種類を指定する必要があります。
SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS
私が提供した照合順序は単なる例であることに注意してください (ただし、問題なく機能する可能性が高いでしょう)。SQL Server 照合順序の詳細については、こちらを参照してください。
通常、文字列比較では大文字と小文字が区別されません。データベースが大文字と小文字を区別する照合に設定されている場合、大文字と小文字を区別しない照合を強制的に使用する必要があります。
SELECT balance FROM people WHERE email = 'billg@microsoft.com'
COLLATE SQL_Latin1_General_CP1_CI_AS
他の場所で別の解決策を見つけました。つまり、使用する
upper(@yourString)
しかし、ここにいる全員が、SQL Server では大文字と小文字を区別しないので問題ではないと言っています。私たちのデータベースは大文字と小文字を区別していると確信しています。
いいえ、使用LIKE
するだけでは機能しません。LIKE
指定されたパターンに正確に一致する値を検索します。この場合LIKE
、テキスト「sOmeVal」のみが検出され、「someval」は検出されません。
実用的な解決策は、LCASE()
関数を使用することです。LCASE('sOmeVal')
テキストの小文字の文字列を取得します: 'someval'。この関数を比較の両側に使用すると、次のように機能します。
SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')
このステートメントは 2 つの小文字の文字列を比較するため、'sOmeVal' は 'someval' の他のすべての表記 ('Someval'、'sOMEVAl' など) と一致します。
次のように、大文字と小文字を区別して varbinary にキャストするように強制できます。
SELECT * FROM myTable
WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal')
どのデータベースを使用していますか? MS SQL Server では、これはデータベース全体の設定ですが、COLLATE キーワードを使用してクエリごとに上書きすることもできます。