2012-05-04 52 views
11

Tôi có chuỗi sau.Cách lấy phần số từ một chuỗi bằng T-SQL?

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

Để có được một phần số, Tôi đang sử dụng đoạn mã sau

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

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

để có được kết quả như sau

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

Có dễ dàng/cách tao nhã khác làm tương tự ?

Trả lời

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

yêu câu trả lời này! –

3

Vui lòng kiểm tra với điều này, tôi sử dụng trong dự án của tôi để trích xuất số điện thoại

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

tôi tìm thấy trong blog này http: //blogs.lessthandot .com/index.php/DataMgmt/DataDesign/sql-server-extracting-data-again Điều này thực sự tốt – Maddy

2

Trong trường hợp chuỗi của bạn bắt đầu với bảng chữ cái và kết thúc bằng số như ERT-123

bạn có thể sử dụng truy vấn này:

(select substring(@str,patindex('%[0-9]%', @str),len(@str))) 
Các vấn đề liên quan