35

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

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

などなど

そのパターンを見つけるために LIKE 演算子をどのように書くことができますか?

私は試した:

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

3 に答える 3

48

私は使うだろう

WHERE columnName LIKE '%[%]%'

LIKESQL Server は、句に一致する行数の見積もりに使用する文字列の要約統計を格納します。角かっこの構文を使用すると、カーディナリティの見積もりがより適切になり、より適切な計画につながる可能性があります。

この 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 が表示されます。

于 2013-09-09T10:36:49.027 に答える
20

使用できますESCAPE

WHERE columnName LIKE '%\%%' ESCAPE '\'
于 2013-09-09T07:28:57.917 に答える