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
在这种情况下有什么解决方案?
答案 0 :(得分:5)
您可以使用解析名称
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),parsename(name,1) from @t
答案 1 :(得分:1)
基于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;
输出: