我有一个名为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 '\'
但这不起作用,只是说我有错误
答案 0 :(得分:2)
要将反斜杠标识为转义字符,您需要使用双反斜杠来表示单个反斜杠。
您还需要一个通配符%来匹配字符串的其余部分。
要识别包含文字'.jpg%'
的行,您可以使用:
LIKE '%.jpg\%%' ESCAPE '\\'
标识不以文字'.jpg'
NOT LIKE '%.jpg'
或
NOT REGEXP '\.jpg$'
答案 1 :(得分:1)
返回image_filename
未完全以.jpg
SELECT `images`.*
FROM images
WHERE `images`.`image_filename` NOT LIKE '%.jpg'
答案 2 :(得分:1)
_
通配符应匹配一个字符,因此请尝试LIKE '%.jpg_%'
它应该匹配.jpg + 1 char + anything
以下是参考: LIKE
operator 。