代码之家  ›  专栏  ›  技术社区  ›  Nick Kavadias

有没有什么方法可以像T-SQL中的通配符表达式那样简化它,而不必求助于CLR?

  •  0
  • Nick Kavadias  · 技术社区  · 14 年前

    我有一列数据库名称,如下所示:

        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]'
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   Nick Kavadias    14 年前

    恐怕没有“优雅”的解决方案。

    需要注意的几件事:

    • 这里可以接受使用下划线,因为目标值似乎遵循非常规则的模式。但是,当与LIKE一起使用时,下划线本身就是一个通配符(对应于一个字符)。如果您确实想指定下划线,请将它们放在括号中,即。 '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]'
    

    i、 e.假设日期为本世纪,限制为大于3倍的日期等。

        2
  •  0
  •   tster    14 年前

    顺便说一下,您需要将下划线放在括号内,因为它表示任何字符。