由于一些设计上的原因以及需求上的模糊导致在一些文件上传的功能上没有过滤上传文件的文件名中存在的特殊字符。
然后就有了这个要一次性查找出所有文件名字记录表中文件名包含特殊字符的记录。
1 SELECT * FROM dbo.table1 WHERE 2 3 ( 4 patindex('%[+%#@=&{},]%',FileName)>0 5 OR FileName like '%[%' 6 OR FileName like '%]%' 7 )
这里使用到了一个sql的内置函数 patindex()
语法格式:PATINDEX ( '%pattern%' , expression )
返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算。
pattern字符串在expression表达式里没找就返回0,对所有有效的文本和字符串就是有效的数据类型。
如:
select patindex('%[d]%','rcrdsddddaadadffdr')
返回4,[]中d在字符串rcrdsddddaadadffdr的第一次出现的位置。
select patindex('%[cd]%','rcrdsdddrdaadadffdr')
返回2,[]中c,d在其中一个的位置,返回最先出现的这个位置,c在此字符串里第一次出现位置是2,而d是4,结果取最先的那个。
select patindex('%[sd]%','rcrdsdddrdaadadffdr')
返回4,[]中c,d在其中一个的位置,返回最先出现的这个位置,s在此字符串里第一次出现位置是5,而d是4,结果取最先的那个。
select patindex('%[^r]%','rrrdsdddrdaadadffdr')
返回4,除[]中的字符串的匹配字符,第一次出现d不在[^r]里,所以就找到第一次这位。
select patindex('%[^rd]%','rrrdsdddrdaadadffdr')
返回5,除[]中的字符串的匹配字符,第一次出现s不在[^rd]里,所以就找到第一次这位。
select patindex('%[^rsd]%','rrrdsdddrdaadadffdr')
返回11,除[]中的字符串的匹配字符,第一次出现a不在[^rsd]里,所以就找到第一次这位。
但是这里 不能用这个函数来查询包含"["和"]"