有这样的数据
 col
1,2,3
5,8,9
6,5,4在sqlserver中怎么样把他转换成
Col1    col2    col3
  1      2        3
  5      8        9
  6      5        4有什么好办法没有?最好不要用游标,临时表。 我要写在一个函数中

解决方案 »

  1.   

    select
    Col1=left(col,charindex(',',col)-1),
    Col2=substring(col,charindex(',',col)+1,charindex(',',col,charindex(',',col)+1)-charindex(',',col)-1),
    Col3=reverse(left(reverse(col),charindex(',',reverse(col))-1))
    from 表
      

  2.   

    create table #t
     (col varchar(100))
    insert into #t
    select '1,2,3' union all
    select '5,8,9' union all
    select '6,5,4'
    select col1=substring(col,charindex(',',col+',',1)-1,1),
           col2=substring(col,charindex(',',col+',',3)-1,1),
           col3=substring(col,charindex(',',col+',',5)-1,1) from #tcol1 col2 col3 
    ---- ---- ---- 
    1    2    3
    5    8    9
    6    5    4(3 row(s) affected)
      

  3.   

    不好意思,为了说明情况,我只是举了个简单的例子,真正的数据是这样的col
     0       apple
      

  4.   

    不好意思,为了说明情况,我只是举了个简单的例子,真正的数据是这样的   col
    0,apple,ppp
    1,orange,ddd
    2,bananaandgrape,mmm
      

  5.   

    create table tb(col varchar(30))
    insert into tb values('0,apple,ppp')
    insert into tb values('1,orange,ddd')
    insert into tb values('2,bananaandgrape,mmm')
    goselect left(col , charindex(',',col)-1) col1 ,
           substring(col,charindex(',',col)+1 , charindex(',',col , charindex(',',col)+1) - charindex(',',col)-1) col2,
           reverse(left(reverse(col),charindex(',',reverse(col))-1)) col3 from tb
    drop table tb
    /*
    col1                           col2                           col3        
    ------------------------------ ------------------------------ -----------0                              apple                          ppp
    1                              orange                         ddd
    2                              bananaandgrape                 mmm(所影响的行数为 3 行)
    */
      

  6.   

    非常感谢,不过这样好像还是比较特殊一点
    数据如果变成下面这样怎么办?   col
    0,apple,ppp,rrr,ddd,eee,fff
    1,orange,ddd,555,33333,444,333
    2,bananaandgrape,mmm,90293839,3489djkd,slkj,987
      

  7.   

    真正的数据是这样的:
    0,P10352,Advertising,-1,-1,-1,-1,-1,-1,-1,2,3,4,5,6,
    1,P10283,Advertising,1,1,1,1,1,1,1,1,1,1,1,1,
    0,P64829,Events,2,3,5,6,8,65,8,9,8,5,4,5,
    0,P10354,Auto,67,-1,67,-1,67,-1,-1,80,56,8,-1,-1,
      

  8.   

    如果这样,不要用SQL语句.
    将数据导出到文本.然后再利用SQL的DTS导入,以逗号分隔就行了.
      

  9.   

    那样是不可能的,这个解决方案是让用户通过Excel的VBA调用webservice,然后传给我这些东西,我把用户提交的数据更新到数据库。这需要我自己分析数据。如果不行的话看来只能用游标了。