sql - management - ¿Por qué el uso de un carácter Subrayado en un filtro LIKE me da todos los resultados?
sql server management studio (4)
Como desea buscar específicamente un carácter comodín, debe escapar de ese
Esto se hace agregando la cláusula ESCAPE
a su expresión LIKE
. El carácter que se especifica con la cláusula ESCAPE
"invalidará" el siguiente carácter comodín.
Puedes usar cualquier personaje que te guste (simplemente no es un carácter comodín). La mayoría de las personas usa una /
porque eso es lo que muchos lenguajes de programación también usan
Entonces su consulta resultaría en:
select *
from Manager
where managerid LIKE ''/_%'' escape ''/'
and managername like ''%/_%'' escape ''/';
Pero también puedes usar cualquier otro personaje:
select *
from Manager
where managerid LIKE ''#_%'' escape ''#''
and managername like ''%#_%'' escape ''#'';
Aquí hay un ejemplo de SQLFiddle: http://sqlfiddle.com/#!6/63e88/4
Escribí la siguiente consulta SQL con una condición LIKE
:
SELECT * FROM Manager
WHERE managerid LIKE ''_%''
AND managername LIKE ''%_%''
En el LIKE
quiero buscar caracteres de subrayado %_%
, pero sé que los datos de mis columnas no tienen caracteres de subrayado.
- ¿Por qué la consulta me da todos los registros de la tabla?
Data de muestra:
create table Manager(
id int
,managerid varchar(3)
,managername varchar(50)
);
insert into Manager(id,managerid,managername)values(1,''A1'',''Mangesh'');
insert into Manager(id,managerid,managername)values(2,''A2'',''Sagar'');
insert into Manager(id,managerid,managername)values(3,''C3'',''Ahmad'');
insert into Manager(id,managerid,managername)values(4,''A4'',''Mango'');
insert into Manager(id,managerid,managername)values(5,''B5'',''Sandesh'');
El guión bajo es el comodín en una consulta LIKE
para un carácter arbitrario.
Por lo tanto, LIKE %_%
significa "darme todos los registros con al menos un carácter arbitrario en esta columna".
Tienes que escapar del carácter comodín, en el servidor sql con []
alrededor:
SELECT m.*
FROM Manager m
WHERE m.managerid LIKE ''[_]%''
AND m.managername LIKE ''%[_]%''
Ver: LIKE (Transact-SQL)
Modifique su condición WHERE
esta manera:
WHERE mycolumn LIKE ''%/_%'' ESCAPE ''/'
Esta es una de las formas en que Oracle admite caracteres de escape. Aquí define el carácter de escape con la palabra clave escape
. Para más detalles, consulte este enlace en Oracle Docs .
El ''_''
y ''%''
son comodines en una declaración operada LIKE
en SQL.
El carácter _
busca la presencia de (cualquier) un solo personaje. Si busca por columnName LIKE ''_abc''
, obtendrá resultados con filas que tienen ''aabc''
, ''xabc''
, ''1abc''
, ''#abc''
pero NO ''abc''
, ''abcc''
, ''xabcd''
etc. .
El carácter ''%''
se usa para hacer coincidir 0 o más números de caracteres. Eso significa que, si busca por columnName LIKE ''%abc''
, le dará el resultado con ''abc''
, ''aabc''
, ''xyzabc''
etc., pero no ''xyzabcd''
, ''xabcdd''
y cualquier otra cadena que no termina con ''abc''
.
En su caso, ha buscado por ''%_%''
. Esto dará todas las filas con esa columna que tiene uno o más caracteres, es decir, cualquier carácter, como su valor. Es por eso que está obteniendo todas las filas aunque no haya _
en los valores de columna.
Underscore es un comodín para algo. por ejemplo, ''A_%'' buscará todas las coincidencias que comiencen con ''A'' y tengan un mínimo de 1 carácter extra después de eso