Dans cet article, nous allons apprendre à utiliser l’opérateur SQL LIKE, dans SQL Server, en utilisant des expressions régulières pour trouver et/ ou manipuler du texte. Nous commencerons par apprendre les symboles et la syntaxe de base de l’utilisation d’expressions régulières génériques. Nous utiliserons des jeux de caractères et des expressions de répétition pour créer des motifs de correspondance flexibles, et en cours de route, nous examinerons différentes façons d’utiliser l’opérateur LIKE. Et puis, enfin, dans la dernière partie de la section, nous explorerons certains des exemples d’expressions régulières les plus courants et les plus utiles.
SQL est le langage le plus couramment utilisé pour travailler avec des bases de données. Lorsque vous concevez un rapport ou utilisez la BI ou tout autre outil de reporting, le logiciel crée presque certainement une requête SQL en coulisses qui s’exécute sur la base de données et renvoie les données sélectionnées. Lorsque nous recherchons des données spécifiques ou des données qui correspondent à des critères spécifiques, la clause where fournit l’ensemble d’outils dont vous avez besoin. Cela donne une option pour interroger des lignes spécifiques que nous recherchons au lieu de la table entière.
Pré-requis
Téléchargez la base de données AdventureWorks2014 ici pour tester les exemples T-SQL suivants.
Mise en route
Laissez-nous parcourir les instructions SQL en utilisant le mot-clé LIKE et les caractères génériques. Commençons donc à en apprendre davantage sur l’opérateur de TYPE SQL.
Utilisation d’exemples de caractères génériques de TYPE SQL
Les expressions régulières sont des modèles pour décrire comment faire correspondre des chaînes dans une clause WHERE. De nombreux langages de programmation prennent en charge les expressions régulières qui utilisent une syntaxe légèrement différente de celle utilisée avec l’opérateur LIKE. Dans cet article, lorsque nous faisons référence à des expressions régulières, nous faisons référence aux modèles utilisés avec l’opérateur SQL LIKE
Le tableau suivant comprend les quatre caractères génériques différents. Vous pouvez également consulter l’article Fonctions de chaîne SQL pour la gestion des données (Querelles) pour plus d’exemples.
Caractères génériques |
Description |
% |
Toute chaîne avec zéro caractère ou plus dans le modèle de recherche |
Toute recherche d’un seul caractère avec le motif spécifié |
|
Toute recherche d’un seul caractère dans la plage spécifiée |
|
Toute recherche d’un seul caractère ne se trouvant pas dans la plage spécifiée |
En utilisant SQL COMME avec ‘ % ’ caractère générique
Ce qui suit L’instruction SQL renvoie toutes les lignes de la table person où leur nom de famille commence par la lettre A. Spécifions la lettre ‘A’, le premier caractère qui doit être dans la chaîne, puis utilisons le caractère générique ‘%’, le pourcentage.
1
2
3
|
SÉLECTIONNEZ LE TOP 10 *
DE la personne.Personne
OÙ prénom COMME ‘A%’;
|
Vous verrez la sortie qui répertorie les 10 premières lignes de la table person où le prénom commence par A et le reste du caractère est inconnu.
En utilisant SQL LIKE avec le caractère générique ‘_’
Le caractère générique, trait de soulignement, sert à faire correspondre n’importe quel caractère. L’instruction SQL suivante trouve tous les numéros de téléphone dont l’indicatif régional commence par 7 et se termine par 8 dans la colonne numéro de téléphone. Nous avons également inclus % caractère générique à la fin du modèle de recherche car nous ne sommes pas concernés par le reste des valeurs de chaîne.
1
2
3
4
5
6
7
|
SÉLECTIONNEZ p. Prénom,
p. Nom,
Numéro de téléphone
DE la personne.PersonPhone EN TANT QUE personne DE JOINTURE INTÉRIEURE ph
.Personne EN TANT QUE p SUR ph.BusinessEntityID = p.BusinessEntityID
OÙ ph.PhoneNumber COMME ‘7_8%’
ORDER BY p.LastName;
|
La sortie indique que l’indicatif régional de ce début par 7 et se termine par 8 sont répertoriés.
En utilisant SQL COMME avec les caractères génériques
Les crochets par exemple nous permettent d’identifier plusieurs caractères uniques qui seraient à cette position particulière. Par exemple, disons de lister toutes les lignes où les prénoms troisième caractère commencent par I ou K. Au lieu d’écrire plusieurs conditions similaires, nous pouvons placer l’ensemble de correspondance de motif en troisième position et le fermer dans le carré. Le moteur de requête recherche d’abord ’I‘ puis ’K’.
Exécutons l’instruction SQL suivante
1
2
3
4
5
6
7
|
SÉLECTIONNEZ p. Prénom,
p.Nom de famille,
Numéro de téléphone
DE la personne.PersonPhone EN TANT QUE personne DE JOINTURE INTÉRIEURE ph
.Personne EN TANT QUE p SUR ph.BusinessEntityID=p.BusinessEntityID
OÙ ph.PhoneNumber COMME ‘7_8%’ et p.lastname comme ‘Ba%’
ORDRE PAR p.LastName;
|
La requête ci-dessus peut être re- écrit en utilisant OU condition. C’est plus comme une condition OU.
1
2
3
4
5
6
7
|
SÉLECTIONNEZ p. Prénom,
p. Nom,
div>Numéro de téléphone
DE la Personne.PersonPhone EN TANT QUE personne DE JOINTURE INTÉRIEURE ph
.Personne EN TANT QUE p SUR ph.BusinessEntityID = p.BusinessEntityID
OÙ le numéro de téléphone ph. COMME ‘7_8%’ et (p. nom de famille comme ‘Bai%’ ou p.nom de famille comme ‘Bak%’)
ORDRE PAR p. Nom de famille;
|
Dans la sortie, nous pouvons voir que les noms de famille où le troisième caractère est ‘I’ ou ‘k’ sont listés
En utilisant SQL LIKE avec le caractère générique ‘^’
L’instruction SQL suivante affiche toutes les lignes qui n’ont pas la lettre commençant par A à D dans le premier caractère de leur nom de famille. Pour cela, placez le caractère tilde dans la première position du motif. Cela devient le NON-prérequis.
1
2
3
4
5
|
SÉLECTIONNEZ p. Prénom,
p. Nom
DE la Personne.Personne p
OÙ NOM DE famille COMME ‘%’
ORDRE PAR p. nom de famille;
|
Maintenant, si j’exécute la requête ci-dessus, nous verrons que tous les noms qui reviennent n’ont pas de A, B, C ou D comme premier caractère.
En utilisant SQL PAS COMME avec les caractères génériques
L’instruction SQL suivante trouve toutes les personnes où la colonne prénom a plus de 3 caractères.
1
2
3
4
|
SÉLECTIONNEZ DISTINCT
prénom
DE la Personne.Personne
OÙ prénom PAS COMME »;
|
La sortie liste uniquement les noms dont la longueur du prénom est supérieure à 3
En utilisant SQL LIKE avec la clause d’ÉCHAPPEMENT
Dans l’instruction SQL suivante, la clause d’ÉCHAPPEMENT est utilisée pour échapper le caractère ‘!’annuler la signification de ‘%’ pour trouver la chaîne ‘100% Libre’ dans la colonne col1 de la table temporaire.
1
2
3
4
5
6
7
8
9
10
11
12
|
DROP TABLE IF EXISTS temp;
CREATE TABLE temp(col1 VARCHAR(100));
GO
INSERT INTO temp
VALUES(‘ApexSQL Refactor is 100% Free SQL Formatter tool’), (‘ApexSQL Job is 10-15% off today only’);
ALLER
SÉLECTIONNER *
DE TEMP;
SÉLECTIONNER *
DE temp
OÙ col1 COMME ‘% 100!% Gratuit % ‘ÉVASION’!‘;
GO
|
La liste de sortie ne répertorie que les valeurs où le motif de recherche ’100% Libre’ correspond à l’expression col1.
En utilisant SQL LIKE avec l’instruction CASE
L’instruction SQL suivante extrait tous les employés qui ont un numéro de téléphone formaté comme trois-trois-quatre chiffres avec des tirets entre les deux (999-999-9999). Le motif est ensuite comparé à la colonne numéro de téléphone pour dériver les catégories nationales ou internationales.
L’expression de casse est évaluée pour le modèle spécifique afin de dériver le type de catégorie de téléphone.
1
2
3
4
5
6
7
8
9
|
SÉLECTIONNEZ p. Prénom,
p. Nom,
Numéro de téléphone,
CAS OÙ ph. Numéro de téléphone COMME ‘–‘ puis ‘Numéro de Téléphone domestique’
SINON ‘Numéro de téléphone international’
Numéro de téléphone INDIEN
DE la Personne.PersonPhone EN TANT QUE personne DE JOINTURE INTÉRIEURE ph
.Personne EN TANT QUE p SUR ph.BusinessEntityID =p.BusinessEntityID
ORDRE PAR p.LastName;
|
Dans la sortie, nous pouvons voir que le numéro est classé comme national ou international. La colonne phonenumber est évaluée avec l’opérateur LIKE à l’aide du crochet carré. Le nombre de zéro à neuf dans la première position de caractère est évalué pour faire correspondre le motif de zéro à neuf, tout nombre de zéro à neuf dans la deuxième position de caractère et la troisième, puis la quatrième position de caractère doit être un tiret et une logique similaire est appliquée au reste des caractères.
En utilisant SQL COMME avec SQL dynamique
L’instruction SQL suivante renvoie tous les employés dont le nom de famille correspond au motif Barb. Le motif est créé dynamiquement et comparé à l’expression.
1
2
3
4
5
6
7
|
INDIQUANT @ELastName VARCHAR(20) = ‘Barb’;
SÉLECTIONNEZ p. Prénom,
p.Nom,
le.Ville
DE la Personne.Personne p
REJOIGNEZ la Personne.Adresse le p.BusinessEntityID = ‘s.AddressID
OÙ p.LastName COMME ‘%’ +@ELastName + ‘%’;
|
La sortie liste les lignes correspondantes pour le motif spécifié Barb
Remarque: Par défaut, CHAR injecte des blancs de fin en fonction de la longueur du champ. Utilisez RTRIM pour supprimer les blancs de fin, si vous utilisez le type de données char.
Dans l’instruction SQL suivante, le champ @eLastName est de type de données char. Vous pouvez voir une utilisation de la fonction RTRIM pour couper les blancs de fin.
1
2
3
4
5
6
7
|
INDIQUANT @ELastName CHAR(20) = ‘Barb’;
SÉLECTIONNEZ p. Prénom,
p. Nom,
le.Ville
DE la Personne.Personne p
REJOIGNEZ la Personne.Adresse le p.BusinessEntityID = ‘s.AddressID
OÙ p.Nom DE famille COMME ‘%’ + RTRIM(@ELastName) + ‘%’;
|
En utilisant SQL Like avec une instruction IF
L’instruction SQL suivante, la valeur d’entrée est évaluée pour le modèle spécifique dans la clause condition en utilisant l’instruction IF.
1
2
3
4
5
|
DECLARE @RuleName NVARCHAR(MAX) = ‘SQL Sever 2019 CTP est disponible pour l’aperçu’;
SI @RuleName COMME ‘SQLSever%CTP est disponible pour l’aperçu’
PRINT’ entrée valide bonne!’;
ELSE
PRINT’pas un bien valide!’;
|
La chaîne d’entrée est évaluée pour des modèles spécifiques à l’aide d’une expression générique de type SQL et renvoie une chaîne d’entrée valide.
C’est tout pour l’instant!
Résumé
Jusqu’à présent, nous avons discuté de divers conseils et de quatre caractères génériques différents (%, _, et ^] disponibles avec l’opérateur de type SQL. C’est une excellente technique de recherche pour faire correspondre une chaîne de caractères avec les motifs spécifiés ou lorsque nous ne sommes pas tout à fait sûrs de ce que vous recherchez, c’est-à-dire une recherche floue. Les caractères génériques disponibles rendent l’opérateur LIKE plus flexible. J’espère que vous avez apprécié cet article sur l’opérateur SQL LIKE dans SQL Server. N’hésitez pas à poser des questions dans les commentaires ci-dessous.
- Auteur
- Messages récents
Ma spécialité réside dans la conception de & mettant en œuvre des solutions haute disponibilité et une migration de base de données multiplateforme. Les technologies actuellement utilisées sont SQL Server, PowerShell, Oracle et MongoDB.
Voir tous les messages de Prashanth Jayaram
- Un aperçu rapide de l’audit de base de données en SQL – 28 janvier 2021
- Comment définir up Synchronisation des données Azure entre les bases de données SQL Azure et SQL Server sur site – 20 janvier 2021
- Comment effectuer des opérations d’importation/exportation de bases de données SQL Azure à l’aide de PowerShell – 14 janvier 2021