我有一列数据库名称,如下所示:
testdb_20091118_124925 testdb_20091119_144925 testdb_20091119_145925 ect...
是否有一种更优雅的方式只返回类似的记录,然后使用这样的表达式:
select * from sys.databases where name
LIKE 'testdb[_][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][_][0-9][0-9][0-9][0-9][0-9][0-9]'
答案 0 :(得分:2)
不,没有“优雅”的解决方案,我很害怕。
此外,在WHERE子句中引入函数,无论是“native”还是CLR,都会阻止SQL使用索引来解析谓词(它必须扫描整个表,除非某些其他谓词来帮助,部分)
需要注意的一些事项:
'abc[_]def'
将匹配'abc_def'
,而不是'abcXdef'
。'testdb_20[0-9][0-9][0-1][0-9][0-3][0-9][_][0-9][0-9][0-9][0-9][0-9][0-9]'
即。假设日期将在本世纪,限制日期大于3倍等。
答案 1 :(得分:0)
不,这是不可能的。
顺便说一句,你需要将下划线放在括号内,因为它意味着任何字符。