我有一个查询来检索需要浏览预定义文件夹的所有文件,文件名必须是特定格式,
像例子:
V<XXXXX>.doc
或<XXXXXX>.doc
文件名是varchar,但是从0到9的数字 (文件名的确切模式为V012134.doc或3213424.doc)
select filename from table1 where filename LIKE '%<> %'
你能建议吗。
谢谢,
答案 0 :(得分:2)
DECLARE @t TABLE(fn VARCHAR(100))
INSERT INTO @t VALUES
('V<123123213>.doc'),
('A123123213.doc'),
('V<V1>.doc'),
('VV<1>.doc'),
('V<1>.doc'),
('V<1>V.doc'),
('V<1V>.doc'),
('VV.doc'),
('<>.doc'),
('<123>.doc'),
('<12A3>.doc')
SELECT fn
FROM @t
WHERE (fn LIKE 'V<%[0-9]%>.doc' OR fn LIKE '<%[0-9]%>.doc') AND
SUBSTRING(fn,
CHARINDEX('<', fn) + 1,
CHARINDEX('>', fn) - CHARINDEX('<', fn) - 1) NOT LIKE '%[^0-9]%'
说明:选择文件名以V
(或不是)开头的行,后跟<
,后跟至少1位,后跟>.doc
和{{1之间的子串}和<
不包含数字以外的符号。
输出:
>
没有fn
V<123123213>.doc
V<1>.doc
<123>.doc
:
<>
答案 1 :(得分:0)
您可以使用like
和not like
:
where (fn like 'V%.doc' and fn not like 'V%[^0-9]%.doc') or
(fn like '%.doc' and fn not like '%[^0-9]%.doc')
或者您可以将它们组合为:
where fn like '[V0-9]%.doc' and fn not like '[V0-9]%[^0-9]%.doc'
like
验证需要在文件名中的字符。 not like
检查它们不应该是非数字。
答案 2 :(得分:0)
此解决方案将匹配确切的位数。例如 -
'<XX>.doc'
将与35.doc
匹配,但不会与5.doc
或357.doc
Declare @format varchar(100) = 'V<XXXXX>.doc'
select filename
from table1
where filename LIKE replace(replace(replace(@format,'<',''),'>',''),'X','[0-9]')