web-dev-qa-db-ja.com

LIKE句で角括弧をエスケープするにはどうすればよいですか?

Likeを使用してストアドプロシージャでアイテムをフィルターしようとしています。列はvarchar(15)です。フィルタリングしようとしているアイテムの名前に角かっこが含まれています。

例:WC[R]S123456

LIKE 'WC[R]S123456'を実行すると、何も返されません。

ESCAPEキーワードをLIKEと共に使用することに関するいくつかの情報を見つけましたが、角括弧を通常の文字列として扱うために使用する方法がわかりません。

216
Travis
LIKE 'WC[[]R]S123456' 

または

LIKE 'WC\[R]S123456' ESCAPE '\'

動作するはずです。

300
Otávio Décio

リテラルits[brac]etに一致させたいとしましょう。

]とペアになっている場合にのみ特別な意味を持つので、[をエスケープする必要はありません。

したがって、[をエスケープするだけで問題を解決できます。[に置き換えることでエスケープできます。 [[]

110
Amitesh

アンダースコアで始まる名前をクエリから除外する必要があったため、次のようになりました。

WHERE b.[name] not like '\_%' escape '\'  -- use \ as the escape character
27
Andrew Backer

私が実際に使用したものは次のとおりです。

like 'WC![R]S123456' ESCAPE '!'
18
Travis

通常はワイルドカードである%や_などの特殊文字を検索する必要がある場合は、ESCAPEキーワードが使用されます。 ESCAPEを指定すると、SQLは文字%と_を文字どおりに検索します。

ここにいくつかの例を含む良い記事があります

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'
11
scottm

私の場合のように、 '_'(アンダースコア)のような特殊文字をエスケープする必要がある場合、あなたは喜んで/できないESCAPE句を定義する場合は、角かっこ '['および ']'で特殊文字を囲むことができます。

これは「奇妙な」文字列の意味を説明します '[[]'- '[' 角括弧付きの文字。効果的にエスケープします。

私の使用例は、プロファイラーのフィルター条件として、アンダースコアを含むストアドプロシージャの名前を指定することでした。だから私は文字列 '%name [_] of [_] a [_] stored [_] procedure%'をTextData LIKEフィールドに入れましたそして、それは私が達成したかった結果をトレースしました。

ドキュメントの良い例を次に示します。 LIKE(Transact-SQL)-リテラルとしてのワイルドカード文字の使用

4
ssurba

ドキュメント によると:

ワイルドカードパターンマッチング文字をリテラル文字として使用できます。ワイルドカード文字をリテラル文字として使用するには、ワイルドカード文字を角かっこで囲みます。

次の3つの文字をエスケープする必要があります%_[

'5%'      LIKE '5[%]'      -- true
'5$'      LIKE '5[%]'      -- false
'foo_bar' LIKE 'foo[_]bar' -- true
'foo$bar' LIKE 'foo[_]bar' -- false
'foo[bar' LIKE 'foo[[]bar' -- true
'foo]bar' LIKE 'foo]bar'   -- true
3
Salman A

「\」またはキーボード上の別の文字の代わりに、キーボード上にない特殊文字を使用することもできます。ユーザーの入力を誤ってエスケープ文字として使用したくない場合は、ユースケースによって異なります。

1
Rob Breidecker

以下を使用

そのまま検索するユーザー入力の場合は、エスケープを使用します。すべての特殊文字の代わりに次の置換が必要になるためです(以下ではすべてのSQL Serverについて説明します)。

ここで、単一引用符「 '」は文字列の連結の問題であるため、like句に影響しないため、使用されません。

「-」と「^」と「]」は、「[」をエスケープするため、置換する必要はありません。

String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");

次に、SQLクエリで次のようになります。 (パラメータ化されたクエリでは、上記の置換後にパターンを使用して文字列を追加できます)。

正確な文字列を検索します。

like 'FormattedString' ESCAPE 'ð'

文字列で検索を開始するには

like '%FormattedString' ESCAPE 'ð'

文字列で終了を検索するには

like 'FormattedString%' ESCAPE 'ð'

文字列で含むを検索するには

like '%FormattedString%' ESCAPE 'ð'

他のパターンマッチングの場合も同様です。ただし、直接のユーザー入力は上記のようにフォーマットする必要があります。

0