SQLServer 2008,查询文件名格式s

时间:2016-12-05 10:44:56

标签: sql sql-server

我有一个查询来检索需要浏览预定义文件夹的所有文件,文件名必须是特定格式, 像例子: V<XXXXX>.doc<XXXXXX>.doc

文件名是varchar,但是从0到9的数字  (文件名的确切模式为V012134.doc或3213424.doc)

select filename from table1 where filename LIKE '%<> %'

你能建议吗。

谢谢,

3 个答案:

答案 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)

您可以使用likenot 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.doc357.doc

匹配
Declare @format varchar(100) = 'V<XXXXX>.doc'

select  filename 
from    table1 
where   filename LIKE replace(replace(replace(@format,'<',''),'>',''),'X','[0-9]')