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 '_%';


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow