繁体   English   中英

用于SQL搜索的正则表达式模式

[英]Regular Expression Pattern for Search in SQL

我想搜索一个文件名称为{Numerical Pattern String} .PDF的表。

例如:1.PDF,12.PDF,123.PDF 1234.PDF等.....

select * from web_pub_subfile where file_name like '[0-9]%[^a-z].pdf'

但是上面的SQL Query甚至会生成此类文件

1801350 Ortho.pdf
699413.processing2.pdf
15-NOE-301.pdf

谁能帮我在这里我所缺少的。

使用开箱即用的sql,您实际上不能做您想做的事情。 您看到这些结果原因%字符与任何字符,任何次数匹配。 它与正则表达式中与*匹配0或更多次的正则表达式不同。

最好的选择可能是创建一些在SQL Server端实现正则表达式功能的CLR函数。 您可以查看此链接 ,找到一个不错的起点。

如果您的版本是2012+,则可以使用Try_Convert()

select * from web_pub_subfile where Try_Convert(int,replace(file_name,'.pdf',''))>0



Declare @web_pub_subfile table (file_name varchar(100))
Insert Into @web_pub_subfile values
('1801350 Ortho.pdf'),
('699413.processing2.pdf'),
('15-NOE-301.pdf'),
('1.pdf'),
('1234.pdf')

select * from @web_pub_subfile where Try_Convert(int,replace(file_name,'.pdf',''))>0

退货

file_name
1.pdf
1234.pdf

一种方法是在文件扩展名之前获取子字符串,然后检查其是否为数字。 如果只有一个,则此解决方案才能很好地工作. 文件名中的字符。

select * from web_pub_subfile
where isnumeric(left(file_name,charindex('.',file_name)-1)) = 1

注意:

对于一些不是数字的字符,例如加号(+),减号(-)和有效的货币符号(例如美元符号($)),ISNUMERIC返回1。

用mutliple处理文件名. 字符,如果始终有.filetype扩展名,请使用

select * from web_pub_subfile
where isnumeric(left(file_name,len(file_name)-charindex('.',reverse(file_name)))) = 1
and charindex('.',file_name) > 0

样本演示

正如@Blorgbeard在评论中所建议的那样,要避免使用isnumeric ,请使用

select * from web_pub_subfile
where left(file_name,len(file_name)-charindex('.',reverse(file_name))) NOT LIKE '%[^0-9]%'
and len(left(file_name,len(file_name)-charindex('.',reverse(file_name)))) > 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM