2017-01-09 58 views
0

我會盡量弄清楚這個...... 假設我有一個2列的表格。 issue_number和issue_text。我需要從issue_text列中獲取2個字符串。第一個字符串是不能夠因爲只有這麼多種類的問題可登錄很難用case語句編碼(注意,我知道這是不是最好的方法)SQL操作字符串

case 
when issue_text like '%error%' then 'error' 
else 'not found' 
end as error_type 

的issue_text是字符串將被格式化主要是相同,它會有一個錯誤,更多信息,然後是一個事件編號,那就是字符串的結尾。

i.e. "Can't add address. Ref Number: 9999999" 

我遇到的問題是數字並不總是與錯誤消息相同數量的字符。

我想知道是否有一種方法來訪問從類似子句中引起匹配的子字符串。喜歡使用正則表達式(我知道在SQL中不支持很好)

case 
when issue_text like '%[0-9 .]%' then (the substring match from like '%[0-9 .]%') 
else 00000 
end as issue_number 

另一個case語句,我僅限於解決這個問題,並分析從SQL Server Management Studio或肯定的,我會使用這些字符串。網絡或東西來利用。

+0

['PATINDEX'](HTTPS ://msdn.microsoft.com/en-us/library/ms188395.aspx)返回一個模式的索引,它會給你你的起始位置。 –

+0

但錯誤號碼總是字符串中的最後一個標記?所以我們可以用REVERSE和SUBSTRING做些什麼? – dlatikay

+0

@dlatikay它始終是字符串中的最後一個,我會嘗試在patindex之後使用,這也看起來像一個可行的選項。將返回結果 – sgriffin

回答

0
Declare @YourTable table (ID int,issue_text varchar(150)) 
Insert Into @YourTable values 
(1,'Can''t add address. Ref Number: 9999999'), 
(2,'error') 


Select ID 
     ,Issue = Left(issue_text,PatIndex('%:%',issue_text+':')-1) 
     ,IssueNo = substring(issue_text,PatIndex('%:%',issue_text+':')+2,25) 
From @YourTable 

返回

ID Issue       IssueNo 
1 Can't add address. Ref Number 9999999 
2 error 
0

如果總有一個空間,就在號碼前和數量是字符串的最後一部分,你可以做

RIGHT(issue_text, CHARINDEX(' ', REVERSE(issue_text)) - 1)