4

重複の可能性:
ブラケット文字を含む SQL Server LIKE

パターン マッチングに問題があります。たとえば、コードを使用して 2 つのオブジェクトを作成しました。

1)[blah1]
2)[blah2] respectively

検索タブで、パターンとして「[blah」を指定すると、すべての文字列、つまり [blah1] と [blah2] が返されるとします。

クエリは

select *
from table1 
where code like N'%[blah%'

問題は条件と特殊文字にあると思います。解決策がある場合は元に戻してください。文字「[」をエスケープできる解決策はありますか。条件を N'%[[blah%' に変更しようとしましたが、それでもテーブル内のすべてのオブジェクトが返されます。

4

3 に答える 3

4

角括弧を閉じないと、結果は指定されません。

ただし、ブラケットを閉じると、話は異なります。つまり、

select *
from table1 
where code like N'%[blah%]%'

この場合、 の一致になり(any) + any of ('b','l','a','h','%') + (any)ます。SQL Server の場合、ESCAPE 句を使用して文字をエスケープできます。

select * from table1 where code like N'%\[blah%\]%' escape '\'

SQL フィドルと例

于 2012-11-30T04:55:34.220 に答える
2

次の方法で、リテラル ブラケット文字をエスケープできます。

select *
from table1 
where code like N'%[[]blah%'

ソース: LIKE (Transact-SQL)の「ワイルドカード文字をリテラルとして使用する」セクション。

これは Microsoft の一貫性のある方法だと思います。Microsoft は角かっこを使用してテーブルと列の識別子も区切っているからです。ただし、括弧の使用は標準 SQL ではありません。ちなみに、LIKE パターンのメタ文字としての括弧も標準 SQL ではないため、他のブランドのデータベースではエスケープする必要はまったくありません。

于 2012-11-30T17:08:15.310 に答える
-2

私の理解によると、記号「[」は、クエリには影響しません。シンボルを使用してクエリを実行し、シンボルを使用せずにクエリを実行すると、同じ結果が表示されます。

UIレベルで不要な文字をスキップできます。

      select * from table1 where code like '%[blah%' 
  select * from table1 where code like '%blah%'

どちらも同じ結果を示しています。

于 2012-11-30T05:05:16.920 に答える