【问题标题】:How to add a dash to pattern matching如何在模式匹配中添加破折号
【发布时间】:2015-05-29 23:30:52
【问题描述】:

这行得通:

select Name
from Table
WHERE Name like '%[^0-9A-Za-z]%'

但现在我还需要将破折号添加到条件中。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    使用

    ...ESCAPE '\'
    

    例如

    WHERE Name like '%[^0-9A-Za-z\-]%' ESCAPE '\'
    

    将最后的“-”视为文字。

    【讨论】:

    • 有一些关于转义here的有趣讨论。
    【解决方案2】:

    除非它是范围的一部分,否则连字符不是LIKE 模式中的特殊字符,因此您可以将其添加到您的模式中,例如:

    select 
            [char]
    from
        (
        select 'a' as 'char' union 
        select '-' union 
        select '$' union
        select '7'
        ) dt
    where 
        [char] like '%[^A-Za-z0-9-]%'
    

    【讨论】:

    • 措辞略有不同,除非连字符是集合中的第一个或最后一个字符,否则它定义一个范围,因此要按字面意思对待它,它必须是第一个或最后一个字符。
    • Rhys Jones 的评论很关键,[^A-Za-z0-9-_] 会失败
    • 并不是说这是错误的,但奇怪的是我刚刚遇到了一个用例,其中not like '%[^A-Za-z0-9-]%' 没有按预期工作,但not like '%[^A-Za-z0-9\-]%' escape '\' 可以。好奇为什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多