Recherche…
Syntaxe
Wild Card avec%: SELECT * FROM [table] WHERE [nom_colonne] Comme '% Value%'
Wild Card avec _: SELECT * FROM [table] WHERE [nom_colonne] Comme 'V_n%'
Wild Card avec [charlist]: SELECT * FROM [table] WHERE [nom_colonne] Comme 'V [abc] n%'
Remarques
La condition LIKE dans la clause WHERE est utilisée pour rechercher des valeurs de colonne qui correspondent au modèle donné. Les motifs sont formés à l'aide des deux caractères génériques suivants
- % (Symbole de pourcentage) - Utilisé pour représenter zéro ou plusieurs caractères
- _ (Underscore) - Utilisé pour représenter un seul caractère
Match à motif ouvert
Le caractère générique %
ajouté au début ou à la fin (ou les deux) d'une chaîne autorise la correspondance de 0 ou plus de tout caractère avant le début ou après la fin du motif.
L'utilisation de '%' au milieu permettra de faire correspondre au moins 0 caractère entre les deux parties du motif.
Nous allons utiliser cette table Employees:
Id | FName | LName | Numéro de téléphone | ManagerId | DépartementId | Un salaire | Date d'embauche |
---|---|---|---|---|---|---|---|
1 | John | Johnson | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
2 | Sophie | Amudsen | 2479100211 | 1 | 1 | 400 | 11-01-2010 |
3 | Ronny | Forgeron | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
5 | Hilde | Knag | 2468021911 | 2 | 1 | 800 | 01-01-2000 |
L'instruction suivante correspond à tous les enregistrements ayant FName contenant la chaîne 'on' de la table Employees.
SELECT * FROM Employees WHERE FName LIKE '%on%';
Id | FName | LName | Numéro de téléphone | ManagerId | DépartementId | Un salaire | Date d'embauche |
---|---|---|---|---|---|---|---|
3 | R on ny | Forgeron | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | J sur | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
L'instruction suivante correspond à tous les enregistrements ayant PhoneNumber commençant par la chaîne '246' par Employees.
SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
Id | FName | LName | Numéro de téléphone | ManagerId | DépartementId | Un salaire | Date d'embauche |
---|---|---|---|---|---|---|---|
1 | John | Johnson | 246 8101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Ronny | Forgeron | 246 2544026 | 2 | 1 | 600 | 06-08-2015 |
5 | Hilde | Knag | 246 8021911 | 2 | 1 | 800 | 01-01-2000 |
L'instruction suivante correspond à tous les enregistrements ayant PhoneNumber se terminant par la chaîne '11' de Employees.
SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
Id | FName | LName | Numéro de téléphone | ManagerId | DépartementId | Un salaire | Date d'embauche |
---|---|---|---|---|---|---|---|
2 | Sophie | Amudsen | 24791002 11 | 1 | 1 | 400 | 11-01-2010 |
5 | Hilde | Knag | 24680219 11 | 2 | 1 | 800 | 01-01-2000 |
Tous les enregistrements où le 3ème caractère de Fname est 'n' de Employees.
SELECT * FROM Employees WHERE FName LIKE '__n%';
(deux traits de soulignement sont utilisés avant "n" pour sauter les 2 premiers caractères)
Id | FName | LName | Numéro de téléphone | ManagerId | DépartementId | Un salaire | Date d'embauche |
---|---|---|---|---|---|---|---|
3 | Ronny | Forgeron | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Match de personnage unique
Pour élargir les sélections d'une instruction de langage de requête structurée (SQL-SELECT), vous pouvez utiliser des caractères génériques, le signe de pourcentage (%) et le trait de soulignement (_).
Le caractère _
(trait de soulignement) peut être utilisé comme caractère générique pour n'importe quel caractère d'un motif.
Trouvez tous les employés dont le nom F commence par 'j' et se termine par 'n' et comporte exactement 3 caractères dans Fname.
SELECT * FROM Employees WHERE FName LIKE 'j_n'
_
(trait de soulignement) peut également être utilisé plusieurs fois comme joker pour correspondre à des motifs.
Par exemple, ce modèle correspondrait à "jon", "jan", "jen", etc.
Ces noms ne seront pas affichés "jn", "john", "jordan", "justin", "jason", "julian", "jillian", "joann" car dans notre requête un trait de soulignement est utilisé et il peut sauter un caractère, le résultat doit donc être de 3 caractères Fname.
Par exemple, ce modèle correspondrait à "LaSt", "LoSt", "HaLt", etc.
SELECT * FROM Employees WHERE FName LIKE '_A_T'
Match par plage ou ensemble
Faites correspondre n'importe quel caractère dans la plage spécifiée (par exemple: [af]
) ou set (par exemple: [abcdef]
).
Ce modèle de plage correspondrait à "gary" mais pas à "mary":
SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'
Ce pattern correspondrait à "mary" mais pas à "gary":
SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'
La plage ou l'ensemble peut également être annulé en ajoutant le curseur ^
avant l'intervalle ou le jeu:
Ce modèle d'intervalle ne correspondrait pas à "gary" mais correspondrait à "mary":
SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'
Ce pattern ne correspondrait pas à "mary" mais correspondrait à "gary":
SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'
Correspondre TOUT contre TOUS
Correspond à n'importe lequel:
Doit correspondre à au moins une chaîne. Dans cet exemple, le type de produit doit être «électronique», «livres» ou «vidéo».
SELECT *
FROM purchase_table
WHERE product_type LIKE ANY ('electronics', 'books', 'video');
Match all (doit répondre à toutes les exigences).
Dans cet exemple, les termes «royaume-uni» et «Londres» et «route de l’est» (y compris les variantes) doivent être appariés.
SELECT *
FROM customer_table
WHERE full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');
Sélection négative:
Utilisez ALL pour exclure tous les éléments.
Cet exemple fournit tous les résultats lorsque le type de produit n'est pas «électronique» et non «livres» et non «vidéo».
SELECT *
FROM customer_table
WHERE product_type NOT LIKE ALL ('electronics', 'books', 'video');
Rechercher une gamme de caractères
L'instruction suivante correspond à tous les enregistrements ayant FName qui commence par une lettre de A à F à partir de la table Employees .
SELECT * FROM Employees WHERE FName LIKE '[A-F]%'
Instruction ESCAPE dans la requête LIKE
Si vous implémentez une recherche textuelle comme LIKE
-query, vous le faites généralement comme ceci:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%')
Cependant, (à part le fait que vous ne devriez pas nécessairement utiliser LIKE
lorsque vous pouvez utiliser la recherche en texte intégral), cela crée un problème lorsque quelqu'un saisit un texte comme "50%" ou "a_b".
Donc, au lieu de passer en recherche de texte intégral, vous pouvez résoudre ce problème en utilisant l’instruction LIKE
-escape:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'
Cela signifie que \
sera maintenant traité comme un caractère ESCAPE. Cela signifie que vous pouvez maintenant simplement ajouter \
à chaque caractère de la chaîne recherchée, et les résultats commenceront à être corrects, même lorsque l'utilisateur entre un caractère spécial tel que %
ou _
.
par exemple
string stringToSearch = "abc_def 50%";
string newString = "";
foreach(char c in stringToSearch)
newString += @"\" + c;
sqlCmd.Parameters.Add("@in_SearchText", newString);
// instead of sqlCmd.Parameters.Add("@in_SearchText", stringToSearch);
Remarque: L'algorithme ci-dessus est à des fins de démonstration uniquement. Cela ne fonctionnera pas dans les cas où 1 graphème est composé de plusieurs caractères (utf-8). par exemple string stringToSearch = "Les Mise\u0301rables";
Vous devrez le faire pour chaque graphème, pas pour chaque caractère. Vous ne devez pas utiliser l'algorithme ci-dessus si vous traitez avec des langues asiatiques / asiatiques / asiatiques du sud. Ou plutôt, si vous voulez un code correct pour commencer, vous devez simplement le faire pour chaque graphe.
Voir aussi ReverseString, une question d'interview C #
Caractères génériques
les caractères génériques sont utilisés avec l'opérateur SQL LIKE. Les caractères génériques SQL sont utilisés pour rechercher des données dans une table.
Les caractères génériques dans SQL sont:%, _, [charlist], [^ charlist]
% - Un substitut à zéro ou plusieurs caractères
Eg: //selects all customers with a City starting with "Lo"
SELECT * FROM Customers
WHERE City LIKE 'Lo%';
//selects all customers with a City containing the pattern "es"
SELECT * FROM Customers
WHERE City LIKE '%es%';
_ - Un substitut à un seul caractère
Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';
[charlist] - Ensembles et plages de caractères à associer
Eg://selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[adl]%';
//selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
[^ charlist] - Correspond uniquement à un caractère non spécifié entre crochets
Eg://selects all customers with a City starting with a character that is not "a", "p", or "l"
SELECT * FROM Customers
WHERE City LIKE '[^apl]%';
or
SELECT * FROM Customers
WHERE City NOT LIKE '[apl]%' and city like '_%';