2017-01-09 141 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)