Les éditeurs de code et les traitements de texte d'aujourd'hui sont dotés d'une fonction de recherche et de remplacement. Il est utile lorsque vous devez modifier un mot ou un groupe de mots. Nous ne voulons pas jeter notre travail écrit pour un problème mineur ou un changement.
La même chose s'applique à nos données. Les utilisateurs nous maudiront si nous leur disons de modifier ce qui doit être renommé. C'est pourquoi une fonction de recherche et de remplacement est également disponible pour remplacer les textes écrits dans nos bases de données. Ici, la commande REPLACE en SQL entre en jeu.
La syntaxe REPLACE en SQL est la suivante :
REMPLACER (
Notez que tous les paramètres sont obligatoires. La
Mais il peut y avoir quelques mises en garde. De cette façon, vous pouvez découvrir comment éviter de remplacer les mauvais mots ou comment éviter d'insérer des enregistrements en double dans SQL Server. Ou, peut-être, ne pas remplacer les bons mots. Puis gâcher vos données à la fin.
Êtes-vous nouveau dans SQL REPLACE ? Voici une feuille de triche GRATUITE pour vous. Entrez simplement votre adresse e-mail ci-dessous et nous l'enverrons directement dans votre boîte de réception.
Cela paraît bien? Creusons.
[sendpulse-form id="12251″]
1. SQL REPLACE remplace le texte pour TOUTES les occurrences
C'est exact. Il balaie tout votre texte avec la chaîne que vous souhaitez rechercher. Laissez-moi vous le montrer et vous expliquer le problème. Regardez l'exemple ci-dessous :
SELECT REPLACE('know the unknown','know','seek');
-- OUTPUT: 'seek the unseekn. Surprise!
Le sait la chaîne existe deux fois, dans les mots savoir et jene sais pas n.m. Si vous ne faites pas attention, des fautes d'orthographe se glisseront dans vos données. Au lieu de cela, vous pouvez ajouter de l'espace pour rechercher uniquement des mots complets. Voici le code modifié :
SELECT REPLACE('know the unknown','know ','seek ');
-- OUTPUT: 'seek the unknown'.
Beaucoup mieux ? Il peut y avoir d'autres scénarios, mais vous comprenez.
2. SQL REPLACE peut supprimer des textes
Avez-vous essayé de remplacer un mot par rien dans un éditeur de texte ? Ou peut-être souhaitez-vous supprimer les doublons dans SQL ? Cela se produit également dans SQL REPLACE. Voici un exemple :
USE AdventureWorks
GO
SELECT
EmailAddress
,REPLACE(EmailAddress,'-','') AS NewEmailAddress
FROM person.EmailAddress;
La première colonne contient le nom de domaine de l'adresse e-mail d'origine. Le second supprime le trait d'union du nom de domaine d'origine. Voir la capture d'écran ci-dessous :
Si vous devez supprimer un ou plusieurs caractères de la chaîne d'origine, utilisez une chaîne SQL vide en remplacement. Vous pouvez également supprimer les enregistrements en double dans SQL de cette manière.
3. Le classement affecte les résultats de SQL REPLACE
Lorsque vous installez un serveur SQL, un classement par défaut est utilisé. À son tour, cela sera utilisé par vos bases de données et vos colonnes de table. La figure 2 montre celle que j'utilise :
Sur mon ordinateur portable, j'utilise SQL_Latin1_CP1_CI_AS . Il s'agit d'un classement insensible à la casse. (Voir aussi CI dans le nom de classement pour c as i nsensible). D'où les mots Chien , chien , CHIEN , et dOg seront traités de la même manière.
Essayons-le en action :
DECLARE @string VARCHAR(200) = 'Cats are great pets
and so easy to take care of. They make good companions.
Having a cat around is good for children.';
SELECT REPLACE(@string,'cat','dog');
Et le résultat est :
La fonction REMPLACER a trouvé le mot Chat en chat s dans la première phrase et le mot chat dans la dernière phrase. Peu importe si les lettres sont en majuscules ou en minuscules.
Cependant, si nous forçons un changement dans le classement en un classement sensible à la casse dans REPLACE, que se passera-t-il ? Voici le code utilisant COLLATE dans REPLACE :
DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';
-- force a change to a case-sensitive collation. '_CS_' for case-sensitive
SELECT REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog');
Et voici le résultat :
Vous voyez maintenant comment le classement affecte le résultat. Chat et chat sont désormais traités différemment. Le paragraphe devient confus. Donc, la leçon est d'utiliser le classement avec prudence.
4. Vous pouvez imbriquer SQL REMPLACER
Vous pouvez remplacer les mots que vous avez déjà remplacés en imbriquant la fonction REPLACE. Voici un exemple :
USE AdventureWorks
GO
SELECT
definition
,REPLACE(REPLACE(definition,'CREATE PROCEDURE','ALTER PROCEDURE'),'BusinessEntityID','BusinessEntityNo')
FROM sys.sql_modules a
INNER JOIN sys.objects b ON a.object_id = b.object_id
WHERE a.definition LIKE '%BusinessEntityID%'
AND b.type = 'P';
L'exemple ci-dessus utilisait un REPLACE dans un REPLACE. C'est à changer CREATE PROCEDURE à MODIFIER LA PROCÉDURE puis BusinessEntityID à BusinessEntityNo .
La requête affectera les procédures stockées qui ont utilisé le BusinessEntityID colonne. Ceci est utile lorsque vous souhaitez renommer une colonne dans une table et remplacer le code de base de données affecté. Les paramètres de procédure stockée sont également affectés, mais vous pouvez choisir de les remplacer pour préserver la cohérence de la dénomination.
Notez qu'avant d'exécuter les instructions ALTER, vous devez vérifier les modifications qui seront appliquées. Vous ne voulez pas tout gâcher, n'est-ce pas ?
Pendant ce temps, l'imbrication REPLACE peut également résoudre le problème que nous avons rencontré plus tôt sur les chats et chiens . Voici la solution :
DECLARE @string VARCHAR(200) = 'Cats are great pets and so easy to take care of.
They make good companions. Having a cat around is good for children.';
SELECT REPLACE(REPLACE(@string COLLATE SQL_Latin1_General_CP1_CS_AS,'cat','dog') COLLATE SQL_Latin1_General_CP1_CS_AS,'Cat','Dog');
Découvrez le nouveau résultat :
Notez également que le problème de capitalisation de la figure 3 est également résolu.
5. Utiliser avec UPDATE pour stocker les textes remplacés
Jusqu'à présent, nous n'avons utilisé SQL REPLACE qu'avec une requête SELECT. Cela nous permettra uniquement de voir la sortie de REPLACE. Pour stocker sa sortie, vous devez également émettre un UPDATE. Voici un exemple :
USE AdventureWorks
GO
UPDATE Person.EmailAddress
SET EmailAddress= REPLACE(EmailAddress,'-','');
Voici un autre exemple utilisant MySQL impliquant les blog_posts tableau dans WordPress. Découvrez comment remplacer une URL privée par une URL publique :
-- View the possible results
SELECT
guid
,REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net') AS NewGUID
FROM blog_posts
WHERE post_date > '2020-10-01';
-- Update the blog_posts table by replacing localhost with a fictitious URL
UPDATE blog_posts
set guid = REPLACE(guid,'http://localhost/techblog','https://sqltechblog.net')
WHERE post_date > '2020-10-01';
Le jeu de résultats pour la première instruction ci-dessus peut être vu ci-dessous en utilisant dbForge Studio pour MySQL :
Conclusion
Jusqu'ici tout va bien. Vous avez vu ce que REPLACE dans SQL peut faire en action. Cela peut donner des idées lorsque vous devez modifier les adresses e-mail et les URL. si vous renommez une colonne dans une table utilisée dans une procédure stockée, une vue ou un synonyme.
Faisons un récapitulatif :
- SQL REPLACE peut remplacer le texte pour TOUTES les occurrences.
- Il peut également supprimer une partie du texte.
- Les paramètres de classement peuvent affecter la sortie de REPLACE.
- Vous pouvez imbriquer l'utilisation de SQL REPLACE.
- Enfin, utilisez UPDATE pour stocker les textes remplacés.
Si vous aimez cet article, partagez-le sur vos réseaux sociaux préférés. Dites-nous également ce que vous en pensez dans la section des commentaires ci-dessous.