从具有特殊字符的MySQL数据库中获取所有文件但我不想对查询中的所有特殊字符使用“或”条件

时间:2017-08-17 09:44:39

标签: mysql sql

我在数据库中有很多文件,带有一些特殊的字符文件名。所以我想获取所有具有特殊字符的文件。

我编写了以下查询来获取具有特殊字符的文件。

例如:

文件名:

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个特殊字符要过滤。我认为这不是一个很好的查询来实现我的要求。

如何编写查询,以便我不需要为所有特殊字符添加“或”条件?

3 个答案:

答案 0 :(得分:2)

使用正则表达式:

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

这将寻找字母数字,下划线和句号。

如果您有特定的排除列表,请使用相同的想法:

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

只需在[]之间添加列表即可。如果这些是您要显式包含的无效字符,请使用正则表达式转义字符。

答案 1 :(得分:1)

SELECT * FROM file_managed WHERE filename LIKE '[!@#$%]'

答案 2 :(得分:1)

请尝试以下查询:

select 
*from file_managed
where filename regexp '[!@]'