SQL-文字列の検索中は大文字と小文字を無視します


130


テーブルに次のデータがあります
PriceOrderShipped
PriceOrderShippedInbound
PriceOrderShippedOutbound

SQLでは、テーブル内の文字列を検索するクエリを記述する必要があります。文字列を検索している間は、大文字と小文字を区別しません。下記のSQLクエリの場合

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%' 

上記のすべてのデータを提供しますが、

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%Priceorder%' 

与えない。

例えば。「PriceOrder」または「priceOrder」を検索すると機能しますが、「priceorder」または「Priceorder」は機能しません。COLLATEを使用して以下のクエリを試してみましたが、機能しません。どこがいけないのか教えてください。

SELECT DISTINCT COL_NAME FROM myTable WHERE 
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'

回答:


232

このようなものを使用してください-

SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')

または

SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')

14
ベストプラクティスとして、常に大文字の文字列(UPPER)を比較する必要があると思います。グーグル「トルコの私」
Traubenfuchs

2
知りたいのですが、列の値を大文字UPPERまたはLOWER小文字に変換してLIKEから、検索に使用することで、答えにパフォーマンスの問題がありますか?
shaijut

一部の文字は大文字で表記が異なり、小文字で表記が同じであるため、実際にはUPPERとLOWERの両方のバリエーションを比較する必要があります。他の文字については、逆のことが当てはまる場合があります。Javaは、大文字と小文字を区別しない比較で追加のtoLowerCase()を実行する理由として、ジョージア語のアルファベットを具体的に述べています。
Crusha K.Rool

1
残念ながら、このアプローチでは、この投稿alvinalexander.com/sql/…で説明されているように全テーブルスキャンが発生します。フィルターされた列はUPPER / LOWER関数によって変更されるため、インデックス検索は適用できません。
ジェフS.

(インデックスを作成する前に)照合順序を設定することは、上限と下限のクエリパフォーマンスが十分でない場合に適しています。
ジェフS.

10

大文字と小文字を区別せずに、この同様の質問と検索への回答を参照してください-SQLサーバーはwhere式で大文字と小文字を区別しませ

次のようなものを使用してみてください:

SELECT DISTINCT COL_NAME 
FROM myTable 
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'

それが機能しないCollat​​eの前にSQLクエリが適切に終了しない
shockwave

ミゲル-F @ ...それが正常に動作しますがどのようにこれも..私のために正常に動作しているので、それはCOL_NAME LIKE「%priceorder%」mytableはFROM SELECT DISTINCT COL_NAME異なるんさ
Jishant

代わりに「SQL_Latin1_General_Cp1_CI_AS_KI_WI」を使用することをお勧めします。検索では大文字小文字を区別しません。
user8155123

8

このような。

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME iLIKE '%Priceorder%'

postgresql。


4
この質問にはsql-serverのタグが付けられているため、postgresの回答は関係ありません。
リアム

4

おそらくSQL_Latin1_General_Cp1_CI_AS_KI_WI照合として使用する必要があります。質問で指定するものは、明示的に大文字と小文字が区別されます。

照合のリストはこちらで確認できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.