2009-05-14 21 views
52

私はPATINDEXとアンダースコアの位置を見つけるための解決策を見つけた:PATINDEXパターン引数でアンダースコア文字をエスケープする方法は?

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

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

はあなたの他のアイデアをお持ちですか?アンダースコア文字をエスケープする方法のように?

答えて

93

は、私はいつもカッコでそれをやった:'%[_]%'

+7

+1参照:http://msdn.microsoft.com/en-us/library/ms187489(SQL.90).aspx、セクション「検索ワイルドカード文字の入力 " – Tomalak

5

あなたはとても似[]文字を使用してエスケープすることができます。

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

20

は、2つのアンダースコアを一致させるには、それぞれが非常にカッコこと

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

'%[_][_]%' -- matches two consecutive _ 
関連する問題