1

フィールド image_filename を持つ images というテーブルがあります。保存された一部の画像のファイル拡張子の後に文字があり、これらが正しく読み込まれないことに気付きました。ファイル名が image.jpg だとすると、これは問題なく無視できますが、ファイル名が image.jpg%3fhf43h408 の場合は、この画像を削除する必要があります。これは、これまでのところ、拡張機能の後にあるものを含むすべての画像を選択しようとする私のクエリです:

SELECT `images`.* FROM images
WHERE `images`.`image_filename` LIKE '%.jpg\%' 

これは、拡張子の後に何もない場合でも、すべての画像を返します。拡張子の後に何かがある画像のみを返すクエリを取得するにはどうすればよいですか。さらに混乱を招くために、拡張子の後のものが常にパーセント記号で始まるように見えるため、ワイルドカードではなく文字通りのパーセント記号として扱われるようにクエリでエスケープしようとしています。私も次のことを試しました:

SELECT `images`.* FROM images
WHERE `images`.`image_filename` LIKE '%.jpg\%' escape '\'

しかし、これは機能せず、エラーがあると表示されるだけです

4

3 に答える 3

2

エスケープ文字として識別される円記号を取得するには、二重の円記号を使用して単一の円記号を表す必要があります。

文字列の残りの部分と一致させるには、ワイルドカード%も必要です。

リテラルを含む行を識別するには'.jpg%'、次を使用できます。

LIKE '%.jpg\%%' ESCAPE '\\'

リテラルで終わらない列値を識別するには'.jpg'

NOT LIKE '%.jpg'

また

NOT REGEXP '\.jpg$'
于 2013-02-05T14:42:05.247 に答える
1

image_filename正確にで終わらないすべての行を返します.jpg

SELECT `images`.* 
FROM images
WHERE `images`.`image_filename` NOT LIKE '%.jpg' 
于 2013-02-05T14:09:01.377 に答える
1

_ワイルドカードは1文字に一致する必要があるため、試してくださいLIKE '%.jpg_%'
一致する必要があります.jpg + 1 char + anything

参照は次のとおりです:LIKE演算子

于 2013-02-05T14:09:24.813 に答える