我有一个以下格式的字段:'xyz; 123; abc'或'456; bcd',想只提取';'之间的倒数第二个字符串。在这些示例中,我希望新列为“ 123”和“ 456”。
答案 0 :(得分:4)
假设您始终至少有两个值,可以为此使用PARSENAME,这比字符串拆分器或复杂的字符串操作要简单得多。
declare @Something table
(
SomeVal varchar(20)
)
insert @Something values
('xyz;123;abc')
, ('456;bcd')
select *
, parsename(replace(s.SomeVal, ';', '.'), 2)
from @Something s
答案 1 :(得分:1)
反转字符串,找到第一个Content-Disposition
和第二个;
,就得到了想要的字符串。只需再次反转以正确的顺序获取它
; with tbl as
(
select field = 'xyz;123;abc' union all
select field = '456;bcd'
)
select *, new_col = reverse(substring(reverse(field), idx1 + 1, idx2 - idx1 - 1))
from tbl t
cross apply
(
select idx1 = charindex(';', reverse(field))
) s1
cross apply
(
select idx2 = charindex(';', reverse(field) + ';', idx1 + 1)
) s2