Escrevi a consulta SQL abaixo com uma LIKE
condição:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
No LIKE
desejo procurar qualquer sublinhado %_%
, mas sei que os dados de minhas colunas não têm caracteres de sublinhado.
- Por que a consulta me fornece todos os registros da tabela?
Dados de amostra:
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
IMORTAL
fonte
fonte
Respostas:
Modifique sua
WHERE
condição assim:Essa é uma das maneiras pelas quais o Oracle oferece suporte a caracteres de escape. Aqui você define o caractere de escape com a
escape
palavra - chave. Para obter detalhes, consulte este link no Oracle Docs .O
'_'
e'%'
são curingas em umaLIKE
instrução operada em SQL.O
_
personagem procura a presença de (qualquer) um único personagem. Se procurar porcolumnName LIKE '_abc'
, ele vai te dar resultado com linhas tendo'aabc'
,'xabc'
,'1abc'
,'#abc'
mas NÃO'abc'
,'abcc'
,'xabcd'
e assim por diante.O
'%'
caractere é usado para corresponder a 0 ou mais caracteres. Isso significa que, se você procurar porcolumnName LIKE '%abc'
, ele vai te dar resultar em ter'abc'
,'aabc'
,'xyzabc'
e assim por diante, mas não'xyzabcd'
,'xabcdd'
e qualquer outra seqüência que não termina com'abc'
.No seu caso, você pesquisou por
'%_%'
. Isso fornecerá todas as linhas com aquela coluna tendo um ou mais caracteres, ou seja, quaisquer caracteres, como seu valor. É por isso que você está obtendo todas as linhas, embora não haja_
valores em suas colunas.fonte
like
operadora. Minha solução funcionará na maioria, senão em todos os bancos de dados.O sublinhado é o curinga em uma
LIKE
consulta para um caractere arbitrário.Portanto,
LIKE %_%
significa "me dê todos os registros com pelo menos um caractere arbitrário nesta coluna".Você tem que escapar do caractere curinga, em sql-server com
[]
cerca de:Consulte: LIKE (Transact-SQL)
Demo
fonte
sql-server
tag em sua pergunta e o SQLFiddle fornecido também é designado como MS SQL Server 2008.Como você deseja pesquisar especificamente por um caractere curinga, você precisa escapar disso
Isso é feito adicionando a
ESCAPE
cláusula à suaLIKE
expressão. O caractere especificado com aESCAPE
cláusula "invalidará" o seguinte caractere curinga.Você pode usar qualquer caractere que desejar (não apenas um caractere curinga). A maioria das pessoas usa um
\
porque é isso que muitas linguagens de programação também usamPortanto, sua consulta resultaria em:
Mas você também pode usar qualquer outro caractere:
Aqui está um exemplo de SQLFiddle: http://sqlfiddle.com/#!6/63e88/4
fonte
O sublinhado é um caractere curinga para alguma coisa. por exemplo 'A_%' irá procurar por todas as correspondências que começam com 'A' e tem no mínimo 1 caractere extra depois disso
fonte
Você pode escrever a consulta conforme abaixo:
vai resolver o seu problema.
fonte
Caso as pessoas estejam pesquisando como fazer no BigQuery:
Um sublinhado "_" corresponde a um único caractere ou byte.
Você pode escapar de "\", "_" ou "%" usando duas barras invertidas. Por exemplo, "\%". Se você estiver usando strings brutas, apenas uma única barra invertida será necessária. Por exemplo, r "\%".
Fonte: https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
fonte