son operador los especiales ejemplos cuales comodines comodin coincidir caracteres busqueda buscar sql-server replace special-characters like

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;