如何转义 PATINDEX 模式参数中的下划线字符?

我找到了一个用 PATINDEX 查找下划线位置的解决方案:

DECLARE @a VARCHAR(10)
SET     @a = '37_21'


PRINT PATINDEX('%_%', @a)                    -- return 1 (false)
PRINT PATINDEX('%!%', REPLACE(@a, '_', '!')) -- return 3 (correct)

你有其他的想法吗? 比如一种逃避下划线字符的方法?

57671 次浏览

我总是用括号: '%[_]%'

您可以使用如下 []字符进行转义:

PRINT PATINDEX('%[_]%', '37_21')

若要匹配两个下划线,每个下划线必须用括号括起来

'%[__]%' -- matches single _ with anything after


'%[_][_]%' -- matches two consecutive _