繁体   English   中英

MySQL查询使用LIKE和通配符来匹配除空字符串之外的任何内容

[英]MySQL query using LIKE and a wildcard to match anything but empty string

我有一个名为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 '\'

但这不起作用,只是说我有错误

要将反斜杠标识为转义字符,您需要使用双反斜杠来表示单个反斜杠。

您还需要一个通配符%来匹配字符串的其余部分。

要识别包含文字'.jpg%' ,您可以使用:

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

识别不以文字'.jpg'结尾的列值

NOT LIKE '%.jpg'

要么

NOT REGEXP '\.jpg$'

返回image_filename不完全以.jpg结尾的所有行

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

_通配符应匹配一个字符,因此请尝试LIKE '%.jpg_%'
它应匹配.jpg + 1 char + anything

这是引用: LIKE运算符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM