我有一个列名称Address,其中包含一些地址,其中'%'为:
Address
--------------------
Aman Ja%lan%
Stree% Ro%ad
等等。
如何编写LIKE运算符来查找该模式?
我试过了:
declare @var char(1)
set @var='!%'
select Address from Accomodation where Address like '%'+@var+'%'
答案 0 :(得分:38)
我会用
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个逻辑读取和第二个查询的33,335个。
答案 1 :(得分:18)
答案 2 :(得分:2)
试试这个:
declare @var char(3)
set @var='[%]'
select Address from Accomodation where Address like '%'+@var+'%'
你必须使用[]取消通配符的效果,所以你读%作为普通字符,idem关于字符_