SQL操作字符串

时间:2017-01-09 19:47:35

标签: sql-server ssms

我试着说清楚...... 我们假设我有一个包含2列的表格。 issue_number和issue_text。我需要从issue_text列中获取2个字符串。第一个字符串可以用case语句进行硬编码,因为只有很多类型的问题可以记录(注意,我知道这不是最好的方法)

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

issue_text是一个字符串,其格式大部分相同,它会有错误,更多信息,然后是事件编号,这就是字符串的结尾。< / p>

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

我遇到的问题是该数字与错误消息的数量并不总是相同。

我想知道是否有办法访问导致来自like子句匹配的子字符串。像使用正则表达式的另一个case语句(我知道在sql中不能很好地支持)

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

我仅限于解决此问题并从SQL Server Management Studio解析这些字符串,或者是,我使用.net或其他东西来利用它。

2 个答案:

答案 0 :(得分: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   

答案 1 :(得分:0)

如果在数字之前总是有空格而且数字是字符串的最后部分,那么

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