J'ai écrit la requête SQL ci-dessous avec une LIKE
condition:
SELECT * FROM Manager
WHERE managerid LIKE '_%'
AND managername LIKE '%_%'
Dans le LIKE
Je veux rechercher des traits de soulignement %_%
, mais je sais que les données de mes colonnes n'ont pas de caractères de soulignement.
- Pourquoi la requête me donne-t-elle tous les enregistrements de la table?
Exemple de données:
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
IMMORTEL
la source
la source
Réponses:
Modifiez votre
WHERE
condition comme ceci:C'est l'une des manières dont Oracle prend en charge les caractères d'échappement. Ici, vous définissez le caractère d'échappement avec le
escape
mot - clé. Pour plus de détails, consultez ce lien sur Oracle Docs .Les
'_'
et'%'
sont des caractères génériques dans uneLIKE
instruction opérée en SQL.Le
_
personnage recherche la présence de (n'importe quel) caractère unique. Si vous effectuez une recherche parcolumnName LIKE '_abc'
, il vous donnera résultat avec des lignes ayant'aabc'
,'xabc'
,'1abc'
,'#abc'
mais pas'abc'
,'abcc'
,'xabcd'
et ainsi de suite.Le
'%'
caractère est utilisé pour faire correspondre 0 ou plusieurs nombres de caractères. Cela signifie que , si vous effectuez une recherche parcolumnName LIKE '%abc'
, il vous donnera résultat avec avoir'abc'
,'aabc'
,'xyzabc'
et ainsi de suite, mais pas'xyzabcd'
,'xabcdd'
et toute autre chaîne qui ne se termine pas avec'abc'
.Dans votre cas, vous avez recherché par
'%_%'
. Cela donnera toutes les lignes avec cette colonne ayant un ou plusieurs caractères, c'est-à-dire tous les caractères, comme valeur. C'est pourquoi vous obtenez toutes les lignes même s'il n'y a aucune valeur_
dans vos colonnes.la source
like
opérateur. Ma solution fonctionnera dans la plupart des bases de données, sinon dans toutes.Le trait de soulignement est le caractère générique dans une
LIKE
requête pour un caractère arbitraire.Par conséquent
LIKE %_%
signifie "donnez-moi tous les enregistrements avec au moins un caractère arbitraire dans cette colonne".Vous devez échapper le caractère générique, dans sql-server avec
[]
environ:Voir: LIKE (Transact-SQL)
Demo
la source
sql-server
balise dans sa question et le SQLFiddle fourni est également désigné comme MS SQL Server 2008.Comme vous voulez rechercher spécifiquement un caractère générique, vous devez échapper à cela
Cela se fait en ajoutant la
ESCAPE
clause à votreLIKE
expression. Le caractère spécifié avec leESCAPE
clause "invalidera" le caractère générique suivant.Vous pouvez utiliser n'importe quel caractère que vous aimez (mais pas un caractère générique). La plupart des gens utilisent un
\
parce que c'est ce que de nombreux langages de programmation utilisent égalementAinsi, votre requête entraînerait:
Mais vous pouvez tout aussi bien utiliser n'importe quel autre caractère:
Voici un exemple SQLFiddle: http://sqlfiddle.com/#!6/63e88/4
la source
Le soulignement est un joker pour quelque chose. par exemple 'A_%' recherchera toutes les correspondances commençant par 'A' et aura au moins 1 caractère supplémentaire après cela
la source
Vous pouvez écrire la requête comme ci-dessous:
cela résoudra votre problème.
la source
Au cas où les gens chercheraient comment le faire dans BigQuery:
Un trait de soulignement "_" correspond à un seul caractère ou octet.
Vous pouvez échapper "\", "_" ou "%" en utilisant deux barres obliques inverses. Par exemple, "\%". Si vous utilisez des chaînes brutes, une seule barre oblique inverse est requise. Par exemple, r "\%".
Source: https://cloud.google.com/bigquery/docs/reference/standard-sql/operators
la source