web-dev-qa-db-ja.com

PATINDEXパターン引数でアンダースコア文字をエスケープする方法は?

私はPATINDEXでアンダースコアの位置を見つけるための解決策を見つけました:

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

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

他にアイデアはありますか?アンダースコア文字をエスケープする方法が好きですか?

67
podosta

私はいつも角括弧でそれをやってきました:'%[_]%'

115

2つのアンダースコアを一致させるには、それぞれを括弧で囲む必要があります

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

'%[_][_]%' -- matches two consecutive _
23
Leif Neland

次のように_[_および_]_文字を使用してエスケープできます。

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

5
Charlie