在第2次到第3次定界符之间选择文本

我正在尝试在SQL服务器中第二次和第三次出现定界符(-)之间选择文本。

例如,如果我有字符串aaa-bbbb-cccc-dddd,我想返回cccc,但是当我有两个以上的分隔符时,我不明白如何使子字符串起作用。 / p>

感谢您的帮助

ergasfgsafg 回答:在第2次到第3次定界符之间选择文本

如果元素的数量始终相同,则可以像这样利用PARSENAME。

select parsename(replace('aaa-bbbb-cccc-dddd','-','.'),2)

但是,如果您的真实数据不一致,则需要使用真实的分割器。

,

如果parsename()(+1)不是有效的选项,则可能是一些XML。

这是两个插图,都返回相同的结果

示例

Declare @YourTable table (SomeCol varchar(500))
Insert Into @YourTable values
('aaa-bbbb-cccc-dddd')

Select SomeCol,Pos2 = cast('<x>' + replace(A.SomeCol,'</x><x>')+'</x>' as xml).value('/x[2]','varchar(50)'),Pos3 = cast('<x>' + replace(A.SomeCol,'</x><x>')+'</x>' as xml).value('/x[3]','varchar(50)')
 From  @YourTable A


Select SomeCol,B.*
 From  @YourTable A
 Cross Apply (
                 Select Pos2 = XMLData.value('/x[2]',Pos3 = XMLData.value('/x[3]','varchar(50)')
                  From  (values (cast('<x>' + replace(A.SomeCol,'</x><x>')+'</x>' as xml))) B1(XMLData)
             ) B

返回

SomeCol             Pos2    Pos3
aaa-bbbb-cccc-dddd  bbbb    cccc
本文链接:https://www.f2er.com/3165973.html

大家都在问