2017-07-27 3 views
1

Ich habe eine varchar Spalte in meiner Tabelle, die Telefonnummern in verschiedenen Formaten zusammen mit etwas Text enthalten kann.Wie Telefonnummer aus Varchar-Spalte in SQL Server extrahieren?

Beispiele:

"This is a test 111-222-3344" 
"Some Sample Text (111)-222-3344" 
"Hello there 1112223344 . How are you?" 

Wie extrahiere ich die Telefonnummern von diesem? Ich habe nach anderen Lösungen gesucht (Another Post), aber sie passen nicht zu meinen Anforderungen.

Danke

+1

Wenn Sie nur die Zahlen wollen diese Verbindung hat eine nützliche Funktion Musterabgleich https://stackoverflow.com/questions/16667251/query-to-get-only-numbers-from-a-string – bushell

+2

Autsch .... die akzeptierte Antwort bei diesem Link verwendet Schleifen. Dies kann satzbasiert erfolgen. Ich werde in Kürze eine Antwort schreiben. –

+1

Sieht aus wie Scsimon mich dazu schlagen. Ich würde etwas Ähnliches tun. –

Antwort

1

Nun, da sie in verschiedenen Formaten sind, wie ich sie im gleichen Format extrahieren würde.

--Handles parentheses, commas, spaces, hyphens.. 
declare @table table (c varchar(256)) 
insert into @table 
values 
('This is a test 111-222-3344'), 
('Some Sample Text (111)-222-3344'), 
('Hello there 111222 3344/How are you?'), 
('Hello there 111 222 3344 ? How are you?'), 
('Hello there 111 222 3344. How are you?') 

select 
replace(LEFT(SUBSTRING(replace(replace(replace(replace(replace(c,'(',''),')',''),'-',''),' ',''),',',''), PATINDEX('%[0-9.-]%', replace(replace(replace(replace(replace(c,'(',''),')',''),'-',''),' ',''),',','')), 8000), 
      PATINDEX('%[^0-9.-]%', SUBSTRING(replace(replace(replace(replace(replace(c,'(',''),')',''),'-',''),' ',''),',',''), PATINDEX('%[0-9.-]%', replace(replace(replace(replace(replace(c,'(',''),')',''),'-',''),' ',''),',','')), 8000) + 'X') -1),'.','') 
from @table 

Partial Credit

+0

Dies bricht, wenn die Telefonnummer zufällig mit Leerzeichen getrennt wird. – bushell

+0

@bushell behoben, dass ... – scsimon

+1

Danke @scsimon. Ich denke, das wird funktionieren! – Abhijith

0

auf diese Weise versuchen auch PATINDEX verwenden, Rückwärts, Ersetzen-Funktionen

declare @Datatable table (c varchar(256)) 
insert into @Datatable 
values 
('This is a test 111-222-3344'), 
('Some Sample Text (111)-222-3344'), 
('Hello there 111222 3344/How are you?'), 
('Hello there 111 222 3344 ? How are you?'), 
('Hello there 111 222 3344. How are you?') 



SELECT c AS VColumn, 
REPLACE(REPLACE(REPLACE(REVERSE(SUBSTRING((c2),PATINDEX('%[0-9]%',(c2)),Len((c2)))),')',''),'-',''),' ','') AS ExtractedNUmber from 
(
SELECT *,REVERSE(SUBSTRING(c,PATINDEX('%[0-9]%',c),LEN(c))) AS C2 from @Datatable 

)dt 

Ergebnis

VColumn          ExtractedNUmber 
-------------------------------------------------------------- 
This is a test 111-222-3344     1112223344 
Some Sample Text (111)-222-3344    1112223344 
Hello there 111222 3344/How are you?  1112223344 
Hello there 111 222 3344 ? How are you?  1112223344 
Hello there 111 222 3344. How are you?  1112223344 
Verwandte Themen