如何在SQL Server中使用LIKE运算符找到'%'?

时间:2013-09-09 07:27:16

标签: sql-server tsql sql-like

我有一个列名称Address,其中包含一些地址,其中'%'为:

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

等等。

如何编写LIKE运算符来查找该模式?

我试过了:

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

3 个答案:

答案 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)

您可以使用ESCAPE

WHERE columnName LIKE '%\%%' ESCAPE '\'

答案 2 :(得分:2)

试试这个:

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

你必须使用[]取消通配符的效果,所以你读%作为普通字符,idem关于字符_