【问题标题】:Split files using SQL使用 SQL 拆分文件
【发布时间】:2017-12-05 13:55:32
【问题描述】:

这是我第一次发帖,如有错误请多多包涵。 我正在尝试使用分隔符“;”拆分数值使用 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

【问题讨论】:

  • Sql server 2014

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


【解决方案1】:

为此,您可以尝试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)

结果:

ID      catalogNumber   STEPID1  STEPID2  STEPID3
815326  FBRS415         499023   499027   726203

【讨论】:

  • 工作就像一个魅力,谢谢你的帮助,我非常感激
猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2015-05-25
  • 1970-01-01
  • 2015-05-23
  • 2011-07-20
相关资源
最近更新 更多