次のように '%'を含むアドレスで構成される列名Addressがあります。
Address
--------------------
Aman Ja%lan%
Stree% Ro%ad
などなど.
そのパターンを見つけるためにLIKE演算子を書くにはどうすればよいですか?
私は試した:
declare @var char(1)
set @var='!%'
select Address from Accomodation where Address like '%'+@var+'%'
私は使うだろう
WHERE columnName LIKE '%[%]%'
SQL Serverは、LIKE
句に一致する行の数を推定する際に使用する文字列の要約統計を保存します。角括弧の構文を使用すると、カーディナリティの推定値が向上し、より適切な計画が作成されます。
this Connect Item 状態への応答
ユーザー定義のエスケープ文字がある場合、正確なカーディナリティの推定はサポートされていません。だから、おそらく貧弱な見積りと貧弱な計画を得ます。将来のリリースでこの問題に対処することを検討します。
例
CREATE TABLE T
(
X VARCHAR(50),
Y CHAR(2000) NULL
)
CREATE NONCLUSTERED INDEX IX ON T(X)
INSERT INTO T (X)
SELECT TOP (5) '10% off'
FROM master..spt_values
UNION ALL
SELECT TOP (100000) 'blah'
FROM master..spt_values v1, master..spt_values v2
SET STATISTICS IO ON;
SELECT *
FROM T
WHERE X LIKE '%[%]%'
SELECT *
FROM T
WHERE X LIKE '%\%%' ESCAPE '\'
最初のクエリに対して457の論理読み取りを示し、2番目のクエリに対して33,335を示します。
これを試して:
declare @var char(3)
set @var='[%]'
select Address from Accomodation where Address like '%'+@var+'%'
[]を使用してワイルドカードの効果をキャンセルする必要があるため、%を通常の文字として読み取ります。