SQL Server通过定界符(动态长度)将字符串分成几列

SQL Server无法使用MySQL split_index函数,并且我的环境在使用"CREATE" "INSERT"这样的服务器上遇到某些功能而无法访问

是否有任何方法可以通过固定的定界符将字符串分成几列? 有3个定界符,但长度是动态的。 例如 STRING:有时-"AA.0.HJ",有时-"AABBCC.099.0",有时-"0.91.JAH21"

子字符串的组合不起作用。

SUBSTRING(STRING,CHARINDEX('.',STRING )+1,LEN(STRING )-CHARINDEX('.',STRING )
Origin:
STRING 
AA.0.HJ
AABBCC.099.0
0.91.JAH21

Target :
STRING        First    Second  Third
AA.0.HJ       AA       0       HJ
AABBCC.099.0  AABBCC   099     0
0.91.JAH21    0        91      JAH21

在这种情况下有什么解决方案?

yangjing314 回答:SQL Server通过定界符(动态长度)将字符串分成几列

您可以使用解析名称

Declare @t table (name varchar(50))

insert into @t values ('AA.0.HJ')
insert into @t values ('AABBCC.099.0')

select parsename(name,3),parsename(name,2),1) from @t
,

基于xml的解决方案

declare @tmp table (STRING varchar(500))

insert into @tmp
values
 ('AA.0.HJ'),('AABBCC.099.0'),('0.91.JAH21')

;WITH Splitted
AS (
    SELECT STRING,CAST('<x>' + REPLACE(STRING,'.','</x><x>') + '</x>' AS XML) AS Parts
    FROM @tmp
    )
SELECT STRING,Parts.value(N'/x[1]','varchar(50)') AS [First],Parts.value(N'/x[2]','varchar(50)') AS [Second],Parts.value(N'/x[3]','varchar(50)') AS [Third] 
FROM Splitted;

输出:

enter image description here

本文链接:https://www.f2er.com/3110804.html

大家都在问