在分隔符的第二次和第三次出现之间选择文本



我试图在SQL server中第二次和第三次出现delimeter(-(之间选择文本。

例如,如果我有字符串aaa-bbbb-cccc-dddd,我想返回cccc,但当我有两个以上的delimeter时,我不明白如何使子字符串工作。

感谢的帮助

如果总是有相同数量的元素,就可以像这样利用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]','varchar(50)')
,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

最新更新