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