Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL - Abfrage von Telefonnummern, die inkonsistent gespeichert sind

WENN Sie die Tabelle ändern können (vorausgesetzt, es handelt sich um SQL Server 2005 und höher), könnten Sie Ihrer Tabelle eine berechnete Spalte hinzufügen und diese beibehalten. Diese Spalte könnte eine "bereinigte" Darstellung Ihres Feldes "Telefonnummer" enthalten.

Etwa so:

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

und dann:

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

Jetzt enthält Ihre Spalte "GesäubertesTelefon" immer eine "bereinigte" Version Ihrer Telefonnummer - immer so etwas wie:555123456.

Da es sich um ein PERSISTED-Feld handelt, entstehen Ihnen auch keine Leistungseinbußen beim Abfragen – der Wert wird in Ihrer Tabelle erstellt und gespeichert und steht als normale Spalte zur Verfügung.

Darauf könnten Sie nun ganz einfach abfragen.

Markus