J'ai un nom de colonne Address qui consiste en une adresse qui contient '%' entre:
Address
--------------------
Aman Ja%lan%
Stree% Ro%ad
etc.
Comment puis-je écrire l'opérateur LIKE pour trouver ce modèle?
J'ai essayé:
declare @var char(1)
set @var='!%'
select Address from Accomodation where Address like '%'+@var+'%'
J'utiliserais
WHERE columnName LIKE '%[%]%'
SQL Server stocke des statistiques récapitulatives sur les chaînes à utiliser pour estimer le nombre de lignes qui correspondront à une clause LIKE
. Les estimations de cardinalité peuvent être meilleures et conduire à un plan plus approprié lorsque la syntaxe entre crochets est utilisée.
La réponse à cet élément de connexion indique
Nous ne prenons pas en charge l'estimation précise de la cardinalité en présence de caractères d'échappement définis par l'utilisateur. Nous avons donc probablement une mauvaise estimation et un mauvais plan. Nous envisagerons de résoudre ce problème dans une prochaine version.
Un exemple
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 '\'
Affiche 457 lectures logiques pour la première requête et 33 335 pour la seconde.
Essaye ça:
declare @var char(3)
set @var='[%]'
select Address from Accomodation where Address like '%'+@var+'%'
Vous devez utiliser [] pour annuler l’effet du caractère générique. Vous devez donc lire% comme caractère normal, idem à propos du caractère _