sql server - los - Caracteres especiales de T-SQL para escaparse para la búsqueda de comodín del operador LIKE
like sql server ejemplos (2)
SQL Server tiene el operador LIKE para manejar búsquedas de comodines. Mi cliente quiere usar el carácter "*" (asterisco) en la interfaz de usuario de una aplicación como el carácter comodín. Me pregunto si debo preocuparme por los caracteres estándar (que se utilizan como caracteres especiales en SQL Server) además del carácter "%" (porcentaje) antes de realizar una búsqueda LIKE wilcard en caso de que su palabra clave contenga un "%" y necesita encontrar un "%" en la cadena actual. Si es así, ¿Que son?
Por lo tanto, supongamos que [tabla1]. [Columna1] nunca tendrá un "*" (asterisco) en la cadena de texto.
Esto es lo que tengo hasta ahora. ¿Debo manejar más situaciones que no sean el carácter "%"
estándar y el "*"
personalizado "*"
-- custom replacement
select REPLACE(''xxx*xxx'', ''*'', ''%'')
-- standard replacements
select REPLACE(''xxx%xxx'', ''%'', ''[%]'')
select REPLACE(''xxx_xxx'', ''_'', ''[_]'') -- ???
select REPLACE(''xxx[xxx'', ''['', ''[[]'') -- ???
select REPLACE(''xxx]xxx'', '']'', ''[]]'') -- ???
Ejemplo:
SET @p = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@p, '']'', ''[]]''), ''['', ''[[]''), ''_'', ''[_]''), ''%'', ''[%]''), ''*'', ''%'')
SELECT ''xxxxxxxxx%xxxxxx'' LIKE @p
SELECT [table1].[column1] LIKE @p
Parece que los tienes todos, aunque creo que escapar '']'' es innecesario. Técnicamente, solo deberías escapar del corchete de apertura (''['').
DECLARE @Table1 TABLE
(
Column1 VARCHAR(32) NOT NULL PRIMARY KEY
);
INSERT @Table1(Column1)
VALUES
(''abc%def''),
(''abc_def''),
(''abc[d]ef''),
(''abc def''),
(''abcdef'');
DECLARE @p VARCHAR(32) = ''abc*]*'';
DECLARE @Escaped VARCHAR(64) = REPLACE(@p, ''['', ''[[]'');
SET @Escaped = REPLACE(@Escaped, ''_'', ''[_]'');
SET @Escaped = REPLACE(@Escaped, ''%'', ''[%]'');
SET @Escaped = REPLACE(@Escaped, ''*'', ''%'');
SELECT T.Column1
FROM @Table1 T
WHERE T.Column1 LIKE @Escaped;
¡¡Se ve bien!! - Mire aquí toda la información relacionada con la cláusula LIKE
.
También lista de caracteres especiales para la cláusula SQL LIKE