Escribí la siguiente consulta SQL con una LIKE
condición:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
En el LIKE
, quiero buscar guiones bajos %_%
, pero sé que los datos de mis columnas no tienen guiones bajos.
- ¿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');
sql
sql-server
INMORTAL
fuente
fuente
Respuestas:
Modifique su
WHERE
condición de esta manera:Esta es una de las formas en que Oracle admite caracteres de escape. Aquí define el carácter de escape con la
escape
palabra clave. Para obtener más detalles, consulte este enlace en Oracle Docs .Los
'_'
y'%'
son comodines en unaLIKE
instrucción operada en SQL.El
_
personaje busca la presencia de (cualquiera) un solo personaje. Si busca porcolumnName LIKE '_abc'
, que le dará resultado con filas que tienen'aabc'
,'xabc'
,'1abc'
,'#abc'
pero NO'abc'
,'abcc'
,'xabcd'
y así sucesivamente.El
'%'
carácter se utiliza para hacer coincidir 0 o más caracteres. Eso significa que, si se busca porcolumnName LIKE '%abc'
, que le dará resultado con tener'abc'
,'aabc'
,'xyzabc'
y así sucesivamente, 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 obtiene todas las filas aunque no haya ningún valor_
en sus columnas.fuente
like
operador. Mi solución funcionará en la mayoría, si no en todas, las bases de datos.El guión bajo es el comodín en una
LIKE
consulta para un carácter arbitrario.Por
LIKE %_%
lo tanto, significa "dame todos los registros con al menos un carácter arbitrario en esta columna".Tienes que escapar del carácter comodín, en sql-server con
[]
alrededor:Ver: LIKE (Transact-SQL)
Demo
fuente
sql-server
etiqueta en su pregunta y su SQLFiddle provisto también se designa como MS SQL Server 2008.Como desea buscar específicamente un carácter comodín, debe escapar de ese
Esto se hace agregando la
ESCAPE
cláusula a suLIKE
expresión. El carácter que se especifica con elESCAPE
cláusula "invalidará" el siguiente carácter comodín.Puede utilizar cualquier carácter que desee (pero no un carácter comodín). La mayoría de la gente usa un
\
porque eso es lo que también usan muchos lenguajes de programaciónEntonces su consulta resultaría en:
Pero también puedes usar cualquier otro carácter:
Aquí hay un ejemplo de SQLFiddle: http://sqlfiddle.com/#!6/63e88/4
fuente
El subrayado 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 adicional después de eso
fuente
Puede escribir la consulta de la siguiente manera:
resolverá tu problema.
fuente
En caso de que las personas estén buscando cómo hacerlo en BigQuery:
Un guión bajo "_" coincide con un solo carácter o byte.
Puede escapar "\", "_" o "%" usando dos barras invertidas. Por ejemplo, "\%". Si utiliza cadenas sin formato, solo se requiere una barra invertida. Por ejemplo, r "\%".
Fuente: https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
fuente