Как экранировать символ подчеркивания в аргументе PATINDEX? - PullRequest
67 голосов
/ 14 мая 2009

Я нашел решение для поиска позиции подчеркивания с помощью PATINDEX:

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

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

У тебя есть другие идеи? Как способ избежать подчеркивания персонажа?

Ответы [ 3 ]

114 голосов
/ 14 мая 2009

Я всегда делал это с помощью скобок: '%[_]%'

23 голосов
/ 18 декабря 2012

Чтобы соответствовать двум подчеркиваниям, каждый должен быть заключен в квадратные скобки

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

'%[_][_]%' -- matches two consecutive _
5 голосов
/ 11 апреля 2012

Вы можете выйти, используя символы [ и ], например:

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

...