web-dev-qa-db-de.com

Wie finde ich '%' mit dem LIKE-Operator in SQL Server?

Ich habe einen Spaltennamen Adresse, der aus einer Adresse besteht, zwischen der '%' steht als:

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

usw. usw.

Wie kann ich den LIKE-Operator schreiben, um dieses Muster zu finden?

Ich habe es versucht:

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

Ich würde ... benutzen

WHERE columnName LIKE '%[%]%'

SQL Server speichert Zeichenfolgen-Zusammenfassungsstatistiken zur Schätzung der Anzahl der Zeilen, die einer LIKE -Klausel entsprechen. Die Kardinalitätsschätzungen können besser sein und zu einem angemesseneren Plan führen, wenn die eckige Klammersyntax verwendet wird.

Die Antwort auf this Connect Item lautet

Wir haben keine Unterstützung für eine präzise Kardinalitätsschätzung bei benutzerdefinierten Escapezeichen. Wir haben also wahrscheinlich eine schlechte Schätzung und einen schlechten Plan. Wir werden dieses Problem in einer zukünftigen Version in Betracht ziehen.

Ein Beispiel

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

Zeigt 457 logische Lesevorgänge für die erste Abfrage und 33.335 für die zweite Abfrage an.

41
Martin Smith

Sie können ESCAPE verwenden:

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

Versuche dies:

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

Sie müssen [] verwenden, um den Effekt von Platzhaltern aufzuheben. Sie lesen% also als normales Zeichen, genau wie Zeichen _.

2
Joe Taras