Sql server 如何在模式匹配中添加破折号

Sql server 如何在模式匹配中添加破折号,sql-server,Sql Server,这项工作: select Name from Table WHERE Name like '%[^0-9A-Za-z]%' 但是现在我还需要将破折号字符添加到条件中。使用 ...ESCAPE '\' e、 g 将最后一个“-”作为文字处理。除非它是范围的一部分,否则连字符在模式中不是特殊字符,因此您可以将其添加到您的模式中,例如: select [char] from ( select 'a' as 'char' union select '-'

这项工作:

select Name
from Table
WHERE Name like '%[^0-9A-Za-z]%'
但是现在我还需要将破折号字符添加到条件中。

使用

...ESCAPE '\'
e、 g


将最后一个“-”作为文字处理。

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

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-\]将失败
select 
        [char]
from
    (
    select 'a' as 'char' union 
    select '-' union 
    select '$' union
    select '7'
    ) dt
where 
    [char] like '%[^A-Za-z0-9-]%'