Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL - Interroger les numéros de téléphone stockés de manière incohérente

SI vous pouvez modifier la table (en supposant qu'il s'agit de SQL Server 2005 et plus), vous pouvez ajouter une colonne calculée à votre table et la conserver. Cette colonne peut contenir une représentation "nettoyée" de votre champ "numéro de téléphone".

Quelque chose comme ça :

 create function dbo.CleanPhone(@phone varchar(100))
 returns varchar(100)
 with schemabinding
 as begin
   return
     replace(replace(replace(replace(replace(replace(@phone, ' ', ''), 
             '-', ''), '(', ''), ')', ''), '-', ''), '+', '')
 end

puis :

alter table (yourtable)
 add cleanedPhone as dbo.CleanPhone(Phone) persisted

Maintenant, votre colonne "CleanedPhone" contiendrait toujours une version "nettoyée" de votre numéro de téléphone - toujours quelque chose comme :555123456.

Puisqu'il s'agit d'un champ PERSISTED, vous n'encourez pas non plus de pénalité de performances lors de l'interrogation - la valeur est créée et stockée dans votre table, et est disponible en tant que colonne normale.

À ce sujet, vous pouvez maintenant interroger assez facilement.

Marc