How to escape underscore character in PATINDEX pat

2019-02-01 03:22发布

问题:

I've found a solution for finding the position of an underscore with PATINDEX :

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

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

Have you other ideas? Like a way to escape the underscore character?

回答1:

I've always done it with brackets: '%[_]%'



回答2:

To match two underscores, each must be bracketed

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

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


回答3:

You can escape using the [ and ] characters like so:

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