[英]Search a string for a regular expression pattern and replace each occurences as a derivation of itself in oracle 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
谁能帮我在这里我所缺少的。
如果您的版本是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.