提取两个分号之间的倒数第二个字符串

时间:2018-09-27 13:56:41

标签: sql-server

我有一个以下格式的字段:'xyz; 123; abc'或'456; bcd',想只提取';'之间的倒数第二个字符串。在这些示例中,我希望新列为“ 123”和“ 456”。

2 个答案:

答案 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