sql 分列

以前根据一些特殊符号,如 |   ;  等拆分数据都是将数据在 excel 列进行分列。今天在网上看到一个sql 脚本,不错,记录下。
原文地址:http://zhidao.baidu.com/link?url=uziiGf4kswkT-umNXpsQ86WLjPEMyKrM-TLChWhcWs_EtSrDeffU5SRlg_QHa1HX11QUBGGc09_SPEZKoNWYja

--模拟数据
create table #yourtable(ID int,Content varchar(4000))
insert into #yourtable(ID,Content)
select 1,'22|5000|3000'
union all select 2,'1|35|200|2'
union all select 3,'802|22'
union all select 4,'213|354|2002|22|500'

--实际操作SQL
declare @sql nvarchar(4000),@i int
set @i=1
while exists(select 1 from #yourtable where Content<>'')
begin  
  set @sql='alter table #yourtable add Data'+convert(varchar,@i)+' int'
  exec(@sql)
  set @sql='declare @loc int update #yourtable set @loc=charindex(''|'',Content),Data'
    +convert(varchar,@i)+'=convert(int,case @loc when 0 then Content else '
    +'substring(Content,1,@loc-1) end),Content=case @loc when 0 then '''' else '
    +'substring(Content,@loc+1,len(Content)-@loc) end  where Content<>'''''
  exec(@sql)
  set @i=@i+1
end
select * from #yourtable

--删除演示数据
drop table #yourtable

--结果
ID          Data1       Data2       Data3       Data4       Data5       
----------- ----------- ----------- ----------- ----------- ----------- 
1           22          5000        3000        NULL         NULL
2           1             35           200          2               NULL
3           802         22           NULL        NULL        NULL
4           213         354         2002        22             500
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值