Escribí la siguiente consulta SQL con una LIKEcondició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
WHEREcondició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
escapepalabra clave. Para obtener más detalles, consulte este enlace en Oracle Docs .Los
'_'y'%'son comodines en unaLIKEinstrucció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
likeoperador. 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
LIKEconsulta 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-serveretiqueta 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
ESCAPEcláusula a suLIKEexpresión. El carácter que se especifica con elESCAPEclá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