我试着说清楚...... 我们假设我有一个包含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或其他东西来利用它。
答案 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)