2017-08-17 41 views
0

我在數據庫中有很多文件,其中包含一些特殊字符文件名。所以我想獲取所有具有特殊字符的文件。從MySQL數據庫中獲取具有特殊字符的所有文件,但我不想在查詢中使用「或」條件查找所有特殊字符

我寫下面的查詢來獲取特殊字符的文件。

例如:

文件名:

file!1.pdf 
file$2.pdf 
file!3.pdf 
file*4.pdf 
file&5.pdf 
file$6.pdf 
file£7.pdf 
file8.pdf 
file9.pdf 
file10.pdf 

查詢是:

SELECT * 
FROM file_managed 
WHERE filename LIKE "%$%" OR filename LIKE "%!%" ; 

或.........

它工作正常,但我有近25個特殊字符可以過濾。我認爲這不是很好的查詢來達到我的要求。

如何編寫查詢,以便我不需要爲所有特殊字符添加「或」條件?

回答

2

使用正則表達式:

select fm.* 
from file_managed fm 
where filename regexp '[^a-zA-Z0-9._]' 

這將尋找字母,數字,下劃線和句點。

如果你有一個特定的排除列表中,使用同樣的想法:

select fm.* 
from file_managed fm 
where filename regexp '[[email protected]#$%^&*()]' 

只需添加[]的列表。如果這些字符是您想要明確包含的無效字符,請使用正則表達式轉義字符。

1
SELECT * FROM file_managed WHERE filename LIKE '[[email protected]#$%]' 
+0

喜邁克爾,這種查詢是不是爲我工作。我得到零結果。 – shrikant

1

請與下面的查詢嘗試:

select 
*from file_managed 
where filename regexp '[[email protected]]'