使用以下字符串示例,我如何提取"加速","超速","制动"?
@String = 'Alarm Time: 28/08/2014 08:45:50 Alarm Status: Acceleration, Accepted by joe.bloggs'
@String = 'Alarm Time: 28/08/2014 08:47:25 Alarm Status: Speeding, Accepted by jane.doe'
@String = 'Alarm Time: 28/08/2014 08:50:14 Alarm Status: Braking, Accepted by john.doe'
如您所见,警报状态可以是可变长度。
我假设我需要SUBSTRING
,CHARINDEX
和可能LEFT
功能的组合,但我完全迷失了。
例如,这适用于获取警报时间,但仅限于警报时间具有固定长度。
RIGHT(SUBSTRING(@String,CHARINDEX('Alarm Time: ', @String),31),19)
提前谢谢。
答案 0 :(得分:2)
如果您想要Alarm status:
之后的所有内容,那么这应该可行:
select substring(@String, charindex('Status: ', @string, 0)+8, len(@string))
如果您只想要关键字("加速","超速","制动"):
select substring(@String, charindex('Status: ', @string, 0)+8, charindex(',',substring(@String, charindex('Status: ', @string, 0)+8, len(@string)),0)-1)
上述两个版本的
修改:仅针对关键字(fiddle for this)
的较短版本SELECT
SUBSTRING(
@String, -- string to be searched
(CHARINDEX('s:', @String) + 2), -- start position
CHARINDEX(',', @String) - (CHARINDEX('s:', @String) + 2) -- length
)
答案 1 :(得分:0)
我非常难看的解决方案:
declare @String as varchar(100) = 'Alarm Time: 28/08/2014 08:45:50 Alarm Status: Acceleration, Accepted by joe.bloggs'
select @string
,
ltrim(rtrim(
replace
(
replace
(
substring
(
substring(@string, patindex('%Alarm Status:%,%', @string), len(@string))
,1
,patindex('%,%', substring(@string, patindex('%Alarm Status:%,%', @string), len(@string))))
, 'Alarm Status:', ''), ',', '')))
我没有检查字符串不包含字符串[Alarm Status]的情况。这可以添加。
解决方案2做了一些假设:你总是在寻找加速'加速'加速'或者'制动&#39 ;;这些单词每个字符串只出现一次 - 如果一个字符串有'加速'它不会有超速'或者'制动&#39 ;; 在这种情况下,您可以使用以下内容:
declare @String as varchar(100)
set @String = 'Alarm Time: 28/08/2014 08:45:50 Alarm Status: Acceleration, Accepted by joe.bloggs'
select case
when charindex('Acceleration', @string) > 0 then 'Acceleration'
when charindex('Speeding', @string) > 0 then 'Speeding'
when charindex('Braking', @string) > 0 then 'Braking'
else null
end
答案 2 :(得分:0)
我设法提出了这个不那么整洁的解决方案。
SELECT SUBSTRING(@String, ( CHARINDEX('Alarm Status: ', @String) + LEN('Alarm Status: ') ), CHARINDEX(', Accepted by ', @String) - (CHARINDEX('Alarm Status: ', @String) + LEN('Alarm Status: ')))
对它的任何改进都将不胜感激。