> Tech > CRL ou T-SQL, à  chacun sa spécialité (2)

CRL ou T-SQL, à  chacun sa spécialité (2)

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

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,

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

Guide inmac wstore pour l’équipement IT de l’entreprise

Guide inmac wstore pour l’équipement IT de l’entreprise

Découvrez toutes nos actualités à travers des interviews, avis, conseils d'experts, témoignages clients, ainsi que les dernières tendances et solutions IT autour de nos 4 univers produits : Poste de travail, Affichage et Collaboration, Impression et Infrastructure.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010