使用SQL拆分文件

时间:2017-12-05 13:55:33

标签: sql sql-server tsql sql-server-2014

这是我第一次发帖提问,所以如果有任何错误,请耐心等待。 我正在尝试使用';'的分隔符拆分数值。使用sql到单独的列,我能够使用下面的代码实现拆分它的一部分,但我想将第3列中的其余部分拆分为单独的列 我有这样一张桌子

ID    catalogNumber    STEPID1
----------------------------
815326  FBRS415    499023;499027;726203
with tmp(catalognumber,stepid1_split,stepid1) as (
select catalognumber,cast(LEFT(stepid1, CHARINDEX(';',stepid1+';')-1) as varchar),cast(STUFF(stepid1, 1, CHARINDEX(';',stepid1+';'), '') as varchar)
from EXACT_MATCH
union all
select catalognumber, cast(LEFT(stepid1, CHARINDEX(';',stepid1+';')-1) as varchar), cast(STUFF(stepid1, 1, CHARINDEX(';',stepid1+';'), '') as varchar)
from tmp
where stepid1> ''
)
select *
from tmp
ID     catalogNumber    STEPID1    STEPID2    STEPID3
---------------------------------------------------
815326   FBRS415         499023      499027      726203

1 个答案:

答案 0 :(得分:0)

为此,您可以尝试使用enum .. XML方法将逗号值拆分为单独的列,请注意这将始终为您提供三列。

您需要添加一些额外的列,以便在定义

时显示逗号分隔值
.node()

结果:

select distinct 
       a.ID,
       a.catalogNumber,
       c.value('/m[1]', 'varchar(max)') [STEPID1],
       c.value('/m[2]', 'varchar(max)') [STEPID2],
       c.value('/m[3]', 'varchar(max)') [STEPID3] from 
(
    select ID ,   catalogNumber ,   cast('<m>'+replace(STEPID1, ';', '</m><m>')+'</m>' as xml) [STEPID1]  from <table>
) a cross apply STEPID1.nodes ('/m') as STEPID1(c)