Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL:interroga il numero di telefono archiviato in modo incoerente

SE puoi modificare la tabella (supponendo che sia SQL Server 2005 e versioni successive), è possibile aggiungere una colonna calcolata alla tabella e mantenerla. Questa colonna potrebbe contenere una rappresentazione "ripulita" del tuo campo "numero di telefono".

Qualcosa del genere:

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

e poi:

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

Ora, la tua colonna "CleanedPhone" conterrebbe sempre una versione "ripulita" del tuo numero di telefono, sempre qualcosa come:555123456.

Poiché si tratta di un campo PERSISTED, non incorrerai in una penalizzazione delle prestazioni durante la query:il valore viene creato e archiviato nella tabella ed è disponibile come una normale colonna.

Su questo, ora puoi interrogare abbastanza facilmente.

Marco