create table test (chr varchar(1000))insert into test values(
'123456789序号        急诊医学科243986程里        015902ZZZZZZZZZZZZZZZ一般物理降温                  次  ')insert into test values(
'123456789            急诊医学科243986程里        000108X00041650100010注射用头孢西丁钠              支  ')                                                                      想得到的查询结果为多列:
123456789序号        ,急诊医学科,243986程里        ,015902ZZZZZZZZZZZZZZZ,一般物理降温                  ,次  
123456789            ,急诊医学科243986程里        ,000108X00041650100010,注射用头孢西丁钠              ,支     
注意:中文的字数不定                                                    
                                                     

解决方案 »

  1.   

    分拆数据到列declare @t table (col varchar(50))
    insert into @t
    select 'aa,bb,bb' union all
    select 'AAA,BBB' union all
    select 'AAA'
    drop table #t
    declare @i int,@s varchar(1000)
    set @i=0
    select col into #t from @t
    while @@rowcount>0
    begin
      set @i=@i+1
      set @s='alter table #t add col'+cast(@i as varchar)+' varchar(100)'
      exec(@s)
      set @s='update #t set col'+cast(@i as varchar)+'=left(col,charindex('','',col+'','')-1),
              col=stuff(col,1,charindex('','',col+'',''),'''')
               where col>'''''
      print @s
      exec(@s)
    end
    select * from #t
      

  2.   

    查询得到的结果,像ULtraEdit里列模式的效果,麻烦把insert这两句放在SQL窗口里看看,就知道我想要的东东了。:)
      

  3.   

    一,连续执行把两个空格置换为一个空格,到最终把空格置为,
    你就可以象那样兄弟那样用了
    二,执行完后,关于第三列,你的是有规律的其实excel最好处理了
    你的结果,就连规则都没有,第一行6列,第二行5列,灰机搞大了
    123456789序号 ,急诊医学科,243986程里 ,015902ZZZZZZZZZZZZZZZ,一般物理降温 ,次   
    123456789 ,急诊医学科243986程里 ,000108X00041650100010,注射用头孢西丁钠 ,支   
      

  4.   

    create table test (f_getstr(chr) varchar(1000))
    insert into test values(
    '123456789序号        急诊医学科243986程里        015902ZZZZZZZZZZZZZZZ一般物理降温                  次  ')insert into test values(
    '123456789            急诊医学科243986程里        000108X00041650100010注射用头孢西丁钠              支  ') 
    create function f_getstr(@str varchar(1000))
    returns varchar(1000)
    begin
         declare @str1 varchar(1000)
         set @str1=''
         set @str=rtrim(ltrim(@str))
         while charindex(' ',@str)>0
          begin
               set @str1=@str1+'.'+left(@str,charindex(' ',@str)-1)
               set @str=ltrim(right(@str,len(@str)-charindex(' ',@str)))
          end
         return stuff(@str1,1,1,' ')+'.'+@str
    end
    select parsename(dbo.f_getstr(chr),4) as a,parsename(dbo.f_getstr(chr),3) as b,
          parsename(dbo.f_getstr(chr),2) as c,parsename(dbo.f_getstr(chr),1) as d
    from testdrop function f_getstr/*
    a               b                           c                                               d               
    --------------- --------------------------- ----------------------------------------------- --------------
     123456789序号    急诊医学科243986程里               015902ZZZZZZZZZZZZZZZ一般物理降温               次    
     123456789      急诊医学科243986程里               000108X00041650100010注射用头孢西丁钠           支      
      

  5.   


    select dbo.f_t(chr,',') from test;alter function f_t(@v varchar(1000),@split char(1))
    returns varchar(1000)
    as
    begin
    declare @ret varchar(1000);
    declare @i int;
    declare @ts varchar(100);
    set @ret='';
    set @v=LTRIM(@v)+' ';

    while LEN(@v)>0
    begin
    set @i=PATINDEX ('%[ ]%',@v);
    set @ts=LEFT(@v,@i);
    set @ret+=@split+@ts;
    set @v=RIGHT(@v,LEN(@v)-@i+1);
    set @v=ltrim(@v);
    end
    return @ret;
    end/*
    ----------------------------------------------------------------------------
    ,123456789序号 ,急诊医学科243986程里 ,015902ZZZZZZZZZZZZZZZ一般物理降温 ,次 
    ,123456789 ,急诊医学科243986程里 ,000108X00041650100010注射用头孢西丁钠 ,支 */
      

  6.   

    不理想,不是按空格分割的。有可能是两列在原串里是连接在一起的。
    比如:015902ZZZZZZZZZZZZZZZ一般物理降温,这一段就没有被分成两列。数据本身已经是被存在DB中的,现在需要分割开来。7楼明白我的意思。
      

  7.   

    把表设计成这个样子,到处有高人啊
    不服不行。。
    结合9楼的方式,这个是第一步。
    第二步就是处理015902ZZZZZZZZZZZZZZZ,拆成两列前6位是一列,后面的是一列。
    理想结果如下:
    015902,ZZZZZZZZZZZZZZZ
    这个不复杂,我就不献丑写code了,楼下的兄弟,加油。。
      

  8.   


    原数据:
    '123456789序号        急诊医学科243986程里        015902ZZZZZZZZZZZZZZZ一般物理降温                  次  ')'123456789            急诊医学科243986程里        000108X00041650100010注射用头孢西丁钠              支  ') 
    需求数据:
    123456789序号 ,急诊医学科,243986程里 ,015902ZZZZZZZZZZZZZZZ,一般物理降温 ,次   
    123456789 ,急诊医学科243986程里 ,000108X00041650100010,注射用头孢西丁钠 ,支 
    第一行:急诊医学科,243986程里 
    第二行:急诊医学科243986程里
    这个程序是分不开了,其它了可以按要求显示
      

  9.   

    只想通SQL层面去实现,觉得还是行不通。结帖了,给平均分,谢谢。