簡體   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