2017-08-17 42 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]]'