1

我有一个名为 images 的表,其中有一个字段 image_filename。我注意到一些已存储的图像在文件扩展名后有字符,并且无法正确加载。所以说文件名是 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

通配符应该匹配一个字符,_所以试试LIKE '%.jpg_%'
它应该匹配.jpg + 1 char + anything

这是参考:LIKEoperator

于 2013-02-05T14:09:24.813 回答