How do I find ' % ' with the LIKE operator in SQL Server? [duplicate]

我只是一个虾纸丫 提交于 2019-12-28 05:56:15

问题


I have a column name Address which consists of some address which has '%' in between as:

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

etc., etc.

How I can write the LIKE operator to find that pattern?

I tried:

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

回答1:


I would use

WHERE columnName LIKE '%[%]%'

SQL Server stores string summary statistics for use in estimating the number of rows that will match a LIKE clause. The cardinality estimates can be better and lead to a more appropriate plan when the square bracket syntax is used.

The response to this Connect Item states

We do not have support for precise cardinality estimation in the presence of user defined escape characters. So we probably get a poor estimate and a poor plan. We'll consider addressing this issue in a future release.

An example

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 '\'

Shows 457 logical reads for the first query and 33,335 for the second.




回答2:


You can use ESCAPE:

WHERE columnName LIKE '%\%%' ESCAPE '\'
  • SQLFiddle Demo



回答3:


Try this:

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

You must use [] cancels the effect of wildcard, so you read % as a normal character, idem about character _



来源:https://stackoverflow.com/questions/18693349/how-do-i-find-with-the-like-operator-in-sql-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!