2012-05-04 12 views
11

Mam następujący ciąg.Jak uzyskać część numeryczną z ciągu za pomocą T-SQL?

Input 
-------------- 
2030031469-NAI 

Aby uzyskać część numeryczną, używam następujący skrypt

declare @str varchar(50)= '2030031469-NAI' 

Select 
    @str 
    ,SUBSTRING(@str, 1, NULLIF(CHARINDEX('-', @str) - 1, -1)) 
     ,Left(@str,PATINDEX('%-%',@str)-1) 

aby uzyskać następujące dane wyjściowe

Output: 
---------- 
2030031469 

Czy istnieje inny łatwy/elegancki sposób robi to samo ?

Odpowiedz

24
select left(@str, patindex('%[^0-9]%', @str+'.') - 1) 
+1

Uwielbiam tę odpowiedź! –

3

proszę skontaktować się z tym, użyłem w moim projekcie do wydobywania numery telefonów

CREATE Function [dbo].[RemoveNonNumericCharacters](@Temp VarChar(1000)) 
    Returns VarChar(1000) 
    AS 
    Begin 

     While PatIndex('%[^0-9]%', @Temp) > 0 
      Set @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '') 

     Return @TEmp 
    End 
+0

znalazłem na tym blogu http: //blogs.lessthandot .com/index.php/DataMgmt/DataDesign/sql-server-extracting-data-again To jest naprawdę niezła – Maddy

2

W przypadku ciąg rozpocząć z alfabetu i koniec z numerem jak ERT-123

cię może użyć tego zapytania:

(select substring(@str,patindex('%[0-9]%', @str),len(@str))) 
Powiązane problemy