web-dev-qa-db-ja.com

SQL ServerでLIKE演算子を使用して '%'を見つけるにはどうすればよいですか?

次のように '%'を含むアドレスで構成される列名Addressがあります。

Address
--------------------
Aman Ja%lan%
Stree% Ro%ad

などなど.

そのパターンを見つけるためにLIKE演算子を書くにはどうすればよいですか?

私は試した:

declare @var char(1)
set @var='!%'
select Address from Accomodation where Address like '%'+@var+'%'
32
Teju MB

私は使うだろう

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を示します。

41
Martin Smith

ESCAPEを使用できます:

WHERE columnName LIKE '%\%%' ESCAPE '\'
19
John Woo

これを試して:

declare @var char(3)
set @var='[%]'
select Address from Accomodation where Address like '%'+@var+'%' 

[]を使用してワイルドカードの効果をキャンセルする必要があるため、%を通常の文字として読み取ります。

2
Joe Taras