0

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

4

2 回答 2

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
于 2018-09-27T14:02:32.790 回答
1

反转字符串,找到第一个和第二个;,你就得到了你想要的字符串。只需再次反转即可以正确的顺序进行

; 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
于 2018-09-27T14:01:41.587 回答