回答:
LIKE 'WC[[]R]S123456'
または
LIKE 'WC\[R]S123456' ESCAPE '\'
うまくいくはずです。
LIKE '[fz]oo'
は「foo」と「zoo」の両方に一致します。
LIKE 'WC\[R]S123456' ESCAPE '\'
それはメンテナンスのために、より読みやすいよう。
リテラルと一致させたいとしましょうits[brac]et
。
]
とペアになって[
いる場合にのみ特別な意味があるため、をエスケープする必要はありません。
したがって[
、問題を解決するには、エスケープで十分です。で[
置き換えることで エスケープでき[[]
ます。
[[]
奇妙に見えますが、パーサーの観点から見ると理にかなっています。パーサーには、間の文字を処理する方法に関する特定のルールがあります[ ]
。だから、テキストits[brac]et
手段は:「次の連続した文字列を検索しますits
(角括弧のルールを適用しますbrac
)、et
」。一方、its[[]brac]et
手段は:「次の連続した文字列を検索しますits
(角括弧のルールを適用します[
)、brac]et
」。
アンダースコアで始まる名前をクエリから除外する必要があったので、次のようになりました。
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
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 '\'
私の場合のように'_'(アンダースコア)のような特殊文字をエスケープする必要があり、ESCAPE句を定義できない、または定義できない場合は、特殊文字を大括弧'[で囲むことができます。 'および'] '。
これは、「奇妙な」文字列「[[]」の意味を説明します- 角括弧で「[」文字を囲み、事実上エスケープします。
私の使用例は、アンダースコアが含まれるストアドプロシージャの名前をプロファイラーのフィルター条件として指定することでした。したがって、文字列'%name [_] of [_] a [_] stored [_] procedure%'をTextData LIKEフィールドに入れて、達成したいトレース結果が得られました。
以下は、ドキュメントの良い例です 。LIKE(Transact-SQL)-リテラルとしてのワイルドカード文字の使用
ドキュメントによると:
ワイルドカードパターンマッチング文字をリテラル文字として使用できます。ワイルドカード文字をリテラル文字として使用するには、ワイルドカード文字を角かっこで囲みます。
これらの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
「\」またはキーボードの別の文字の代わりに、キーボードにない特殊文字を使用することもできます。ユースケースによっては、ユーザー入力を誤ってエスケープ文字として使用したくない場合に、これが必要になることがあります。
¬
これは英国ではキーボードの文字ですが、意識的に使用されることはめったにありません:)(Esc
との間の左上Tab
)
以下を使用してください。
ユーザー入力をそのまま検索するには、エスケープを使用します。すべての特殊文字を以下のように置き換える必要があります(以下はすべてのSQL Serverをカバーしています)。
ここでは、単一引用符 "'"は文字列連結の問題であるため、like句には影響しないため、使用していません。
「-」と「^」と「]」は、「[」をエスケープしているため、置換する必要はありません。
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
次に、SQLクエリでは次のようになります。(パラメーター化されたクエリでは、文字列は上記の置換後にパターンで追加できます)。
正確な文字列を検索します。
like 'FormattedString' ESCAPE 'ð'
文字列で検索を開始するには
like '%FormattedString' ESCAPE 'ð'
文字列で末尾を検索するには
like 'FormattedString%' ESCAPE 'ð'
文字列を含むを検索するには
like '%FormattedString%' ESCAPE 'ð'
他のパターンマッチングについても同様です。ただし、直接ユーザー入力は、上記のようにフォーマットする必要があります。