> 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

Les 10 tendances clés de l’Expérience Client (CX) pour 2025

Les 10 tendances clés de l’Expérience Client (CX) pour 2025

Dans le contexte actuel, l'expérience client est un levier clé de réussite. Pour rester compétitives, les entreprises doivent adopter des stratégies CX audacieuses, en s'appuyant sur le cloud, le digital et l'IA. Alors quelles stratégies mettre en place pour garder une longueur d’avance ?

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