2009-03-04 6 views
3

J'ai une question de débutant en T-SQL.Comment réécrire des numéros de téléphone dans T-SQL?

Nous avons importé des feuilles Excel dans un SQL Server 2008. Dommage que ces fichiers Excel n'aient pas été formatés comme ils le devraient. Nous voulons un numéro de téléphone ressemblant à ceci: '', aucun espace de début et de fin et aucun espace à l'intérieur. Pire encore, le numéro est parfois codé avec le préfixe «0123-2349823» ou «0123/2349823».

Normalement, je voudrais exporter le fichier Excel dans un fichier CSV, puis lancer un script Perl magique pour faire le nettoyage, puis réimporter le fichier Excel.

Pourtant, il serait intéressant de savoir comment faire des choses comme ça avec T-SQL.

Des idées?

Répondre

4

Quelque chose comme

replace(replace(rtrim(ltrim('0123-2349823')), '-', ''), '/', '') 

devrait fonctionner. Ça n'a pas l'air joli. ;)

+0

C'était facile :) – raupach

+0

+1: Ha, je overthunk. Cela semble mieux que ce que j'ai suggéré. ;) – Sung

+0

@nooomi: Vous avez dit que vous aimez Perl ...: P –

0

« Nettoyé » ne contient que la valeur numérique

Selon que un numéro de téléphone contient « - », «/», les remplacer par une chaîne vide.

create table #t (tel varchar(30)) 

insert #t select '0123-2349823' 
insert #t select '0123/2349823' 

select tel, 
     replace(tel, 
      case 
       when patindex('%-%', tel) > 0 then '-' 
       when patindex('%/%', tel) > 0 then '/' 
      end, '') as Cleaned 
from #t 
+0

Qu'est-ce que #t? Je n'ai jamais vu ça avant. – raupach

+0

C'est une table temporaire que j'ai l'habitude de tester afin que vous puissiez simplement copier et coller le code ci-dessus pour voir si cela fonctionne dans votre environnement – Sung

2

Je voudrais y aller avec une mise à jour et utiliser les fonctions 'Replace' et LTrim/RTrim pour SQL.

Update Table1 
set phonenum = Case 
     When phonenum like '%-%' Then LTrim(RTrim(Replace(phonenum, '-', ''))) 
      Else LTrim(RTrim(Replace(phonenum, '/', ''))) 
     End 
Questions connexes