Supposons que vous ayez besoin d’effectuer un remplacement de chaînes complexe à partir de modèles. La fonction T-SQL REPLACE accepte trois arguments de chaîne de caractères (appelons-les str1, str2 et str3). Elle remplace toutes les occurrences de str2 dans str1 par str3. Néanmoins, str2 et str3 sont des chaînes constantes,
CRL ou T-SQL, à chacun sa spécialité (2)
pas des modèles. T-SQL ne possède pas de fonction intégrée permettant de remplacer toutes les occurrences d’un modèle par un autre modèle.
Par exemple, considérons la colonne Phone (téléphone) dans la table Customers créée précédemment. Supposons que vous souhaitiez supprimer tous les caractères spéciaux de la colonne Phone, autrement dit les caractères qui ne sont pas un chiffre (0-9) ou une lettre (a-Z ou A-Z). Ce type de remplacement peut être nécessaire afin d’identifier les doublons « logiques » de numéros de téléphone, à savoir des numéros identiques saisis avec de légères variations. Par exemple, les numéros (503) 555-7555, 503-555-7555 et 503.555.7555 doivent être considérés comme identiques. Il en va de même pour le numéro 555- FILM et 555 FILM, alors que 555-FILM et 555-FILK doivent être traités comme différents.
Lorsque vous éliminez les caractères spéciaux des numéros de téléphone, vous obtenez des chaînes telles que 5035557555 et 555FILM, que vous pouvez comparer afin de déterminer l’unicité logique. Commençons par l’implémentation T-SQL de la fonction UDF fn_RemoveChars, illustrée sur le listing 2. La fonction UDF accepte les entrées @string et @pattern, et supprime dans @string toutes les occurrences de caractères correspondant au modèle fourni pour @pattern. La fonction UDF s’appuie principalement sur la fonction intégrée PATINDEX, laquelle retourne la première position d’un modèle dans une chaîne.
Pour exécuter l’itération à travers les occurrences du modèle, la fonction UDF appelle PATINDEX dans une boucle et supprime le caractère lorsqu’elle trouve le modèle. Il est difficile d’éviter la logique itérative pour implémenter cette tâche. Par ailleurs, la fonctionnalité UDF est limitée car elle supprime les caractères uniquement lorsqu’elle trouve le modèle. Il est également difficile de remplacer les modèles par un autre au lieu d’une chaîne constante. Avant de tester la fonction UDF, exécutez le code suivant afin d’entrer le contexte de la base de données TSQLCLR et d’activer l’option de session STATISTICS TIME :
USE TSQLCLR;
SET STATISTICS TIME ON;
Ensuite, exécutez la requête suivante, laquelle élimine tous les caractères spéciaux des numéros de téléphone dans les 100 000 lignes de la table Customers :
SELECT Phone,
dbo.fn_RemoveChars(Phone,
N’%[^0-9a-zA-Z]%’) AS CleanPhone
FROM dbo.Customers;
Téléchargez cette ressource
Plan de sécurité Microsoft 365
Les attaquants savent comment prendre le contrôle de votre tenant Microsoft 365, et vous, savez-vous comment le reprendre en main ?
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Les Assises 2026 : encore plus d’énergie pour poursuivre le chemin
- Agents IA : arrêtons de leur confier nos secrets
- Ransomwares : l’extorsion vise désormais les salariés et leurs proches
- Veeam passe à la vitesse supérieure avec iResOps pour Microsoft 365
Articles les + lus
Continuer avec Exchange Server : quelles conséquences ?
Raccourcis Réseau et Navigateur : le kit de Diagnostic des Professionnels IT
Raccourcis PowerShell et Windows Terminal pour les Professionnels IT
Commandes Windows 11 : le Guide des Outils accessibles avec Win + R
Sécurité : une approche dans la durée avant tout
À la une de la chaîne Tech
- Continuer avec Exchange Server : quelles conséquences ?
- Raccourcis Réseau et Navigateur : le kit de Diagnostic des Professionnels IT
- Raccourcis PowerShell et Windows Terminal pour les Professionnels IT
- Commandes Windows 11 : le Guide des Outils accessibles avec Win + R
- Sécurité : une approche dans la durée avant tout
