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

时间:2009-05-14 14:09:38

标签: sql-server regex tsql escaping sql-like

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

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

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

你有其他想法吗?像逃避下划线角色的方式?

3 个答案:

答案 0 :(得分:114)

我总是用括号做{:1}}

答案 1 :(得分:23)

要匹配两个下划线,每个下划线必须加上

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

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

答案 2 :(得分:5)

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

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