你要的是这个
set @step=(SELECT CHARINDEX(',', @str,num))
第一个参数是要查找的字符 第2个是个字符串 第3个是开始查找的位置
函数返回找到的位置如果没找到返回0
你可以把表中第2个字段值保存到变量里 用循环查找初始第3个参数为0 后面就为函数返回值+1 直到
函数返回0 
把查找的位置用right(@str,len(@str)-@step)
就得到每段字符了 后面的插入不用说了吧

解决方案 »

  1.   

    哦 说错了点 就是right函数 这里该用substring函数 把前一次的返回值+1作为起点 用这次返回
    值和前次的差作为长度 得到子字符串
      

  2.   

    只是按照楼主说的最多15来写的,扩展性不是很好
    create procedure f_GetNew
    as
      begin 
       create table #t(zhuohao int,col_1 varchar(3),col_2 varchar(3),col_3 varchar(3),col_4 varchar(3),col_5 varchar(3),col_6 varchar(3),col_7 varchar(3),col_8 varchar(3),col_9 varchar(3),col_10 varchar(3),col_11 varchar(3),col_12 varchar(3),col_13 varchar(3),col_14 varchar(3),col_15 varchar(3))
       declare @i int,@count int,@sql varchar(8000),@s varchar(100),@zhuohao int
       declare c_t_a cursor for select zhuohao,caidanhao from t_a
       open c_t_a
       fetch next from c_t_a into @zhuohao,@s
       while @@fetch_status=0
       begin
       select @i=0,@count=len(@s)-len(replace(@s,',','')),@sql='ZhuoHao='+cast(@zhuohao as varchar(10))

       while @i<@count
        begin
         set @sql=@sql+',Col_'+cast(@i+1 as varchar(10))+'='''+substring(@s,1,charindex(',',@s)-1)+''''
         if charindex(',',@s)=0 break
         set @s=substring(@s,charindex(',',@s)+1,len(@s)-charindex(',',@s))
         set @i=@i+1
      end
      set @sql=@sql+',Col_'+cast(@i+1 as varchar(10))+'='''+@s+''''
      while @i<15-1 
       begin
        set @i=@i+1
        set @sql=@sql+',Col_'+cast(@i+1 as varchar(10))+'='''''
      end
              set @sql='insert into  #t  select ' + @sql
      exec(@sql)
        fetch next from c_t_a into @zhuohao,@s
      end
      close c_t_a
      deallocate c_t_a
      select * from #t
    endexec dbo.f_getNew
      

  3.   

    附上测试数据
    create table t_a (zhuohao int,caidanhao varchar(100))
    insert t_a
    select    12,             '123,104' union all
    select    13,             '103,105,106 ' union all
    select    14,             '109,189,178,198'
      

  4.   

    我自己是这样做的,看各位有什么高见.我也是最近才学,不是太懂,多多指教.
    CREATE  PROCEDURE [diancai] @zhuohao int
     AS
    declare @caidanhao varchar(70)
    declare @at int
    declare @ar int 
    declare @cai1 int
    declare @cai2 int
    declare @cai3 int
    declare @cai4 int
    declare @cai5 int
    declare @cai6 int
    declare @cai7 int
    declare @cai8 int 
    declare @cai9 int
    declare @cai10 int
    declare @cai11 int
    declare @cai12 int
    declare @cai13 int
    declare @cai14 int 
    declare @cai15 intset @at = 1
    set @caidanhao = (select caidanhao from a 
       where zhuohao = @zhuohao and flag = 0)while @at <= 15
    begindeclare @i smallint
    set @i = ( @at - 1)*4 + 1
    set @ar = substring(@caidanhao,@i,3)if @at = 1
       set @cai1 = @ar
    if @at =2 
       set @cai2 = @ar
    if @at =3
       set @cai3 = @ar
    if @at =4
       set @cai4 = @ar
    if @at =5
       set @cai5 = @ar
    if @at =6
       set @cai6 = @ar
    if @at =7 
       set @cai7 = @ar
    if @at =8
       set @cai8 = @ar
    if @at =9
       set @cai9 = @ar
    if @at =10 
       set @cai10 = @ar
    if @at =11
       set @cai11 = @ar
    if @at =12
       set @cai12 = @ar
    if @at =13 
       set @cai13 = @ar
    if @at =14
       set @cai14 = @ar
    if @at =15
       set @cai15 = @arset @at = @at+1endinsert c
    (zhuohao,cai1,cai2,cai3,cai4,cai5,cai6,cai7,cai8,cai9,cai10,cai11,cai12,cai13,cai14,cai15)
    values (@zhuohao,@cai1,@cai2,@cai3,@cai4,@cai5,@cai6,@cai7,@cai8,@cai9,@cai10,@cai11,@cai12,@cai13,@cai14,@cai15)update a set flag = 1 where zhuohao = @zhuohaoGO
      

  5.   

    gujianmin(冰比冰水冰)想法不错,最终的目的是打印几机打印出来,不知道那种方法合适.方便可以把实现过程告诉我,各位也可以帮一下,看那种更好,提下建议.我也是才开始学,谢谢各位的帮忙.祝圣诞快乐.
      

  6.   

    说得多不如做。create table #流水帐
    (
    流水号 int,
    菜号 int,
    菜单 nvarchar(10),
    数量 int
    )
    insert into #流水帐 values (1,1,'A1',2)
    insert into #流水帐 values (2,1,'A1',1)
    insert into #流水帐 values (2,2,'A2',3)
    insert into #流水帐 values (3,1,'A1',1)
    insert into #流水帐 values (3,2,'A2',1)
    insert into #流水帐 values (3,3,'A3',1)
    insert into #流水帐 values (3,4,'A4',5)
    insert into #流水帐 values (4,1,'A1',1)
    insert into #流水帐 values (4,2,'A2',1)
    insert into #流水帐 values (4,3,'A3',1)
    insert into #流水帐 values (4,4,'A4',4)
    insert into #流水帐 values (4,5,'C1',1)
    insert into #流水帐 values (4,6,'C2',1)
    insert into #流水帐 values (5,1,'A1',1)
    insert into #流水帐 values (5,2,'A2',2)
    insert into #流水帐 values (5,3,'A3',1)
    insert into #流水帐 values (5,4,'A4',1)
    insert into #流水帐 values (5,5,'B1',1)
    insert into #流水帐 values (5,6,'B2',1)
    insert into #流水帐 values (5,7,'C3',1)
    insert into #流水帐 values (5,8,'C4',1)
    insert into #流水帐 values (5,9,'C1',1)
    insert into #流水帐 values (5,10,'C2',1)
    insert into #流水帐 values (6,1,'A1',1)
    insert into #流水帐 values (6,2,'A2',1)
    insert into #流水帐 values (6,3,'A3',1)
    insert into #流水帐 values (6,4,'A4',5)create table #翻桌帐
    (
    流水号 int,
    桌号 int,
    人数 int,
    日期 smalldatetime
    )
    insert into #翻桌帐 values (1,1,8,'2005-01-01 12:00:00')
    insert into #翻桌帐 values (2,2,5,'2005-01-01 12:10:00')
    insert into #翻桌帐 values (3,3,6,'2005-01-02 12:10:00')
    insert into #翻桌帐 values (4,4,7,'2005-01-02 12:10:00')
    insert into #翻桌帐 values (5,2,8,'2005-01-02 17:10:00')
    insert into #翻桌帐 values (6,4,9,'2005-01-03 18:10:00')create table #菜单
    (
    菜单 nvarchar(10),
    菜名 nvarchar(10),
    价格 decimal(5,2)
    )
    insert into #菜单 values ('A1','菜1',10.00)
    insert into #菜单 values ('A2','菜2',20.00)
    insert into #菜单 values ('A3','菜3',30.00)
    insert into #菜单 values ('A4','菜4',40.00)
    insert into #菜单 values ('A5','菜5',50.00)
    insert into #菜单 values ('B1','菜6',16.00)
    insert into #菜单 values ('B2','菜7',17.00)
    insert into #菜单 values ('B3','菜8',18.00)
    insert into #菜单 values ('B4','菜9',19.00)
    insert into #菜单 values ('B5','菜10',20.00)
    insert into #菜单 values ('C1','菜11',21.00)
    insert into #菜单 values ('C2','菜12',22.00)
    insert into #菜单 values ('C3','菜13',23.00)
    insert into #菜单 values ('C4','菜14',24.00)
    insert into #菜单 values ('C5','菜15',25.00)
    select 
    a.流水号,
    c.日期,
    c.桌号,
    c.人数,
    sum(b.价格*a.数量) 总价,
    sum(a.数量) 数量,
    min(case when a.菜号 = 1 then a.数量 else null end) '数量1',
    min(case when a.菜号 = 1 then b.菜名 else null end) '菜名1',
    min(case when a.菜号 = 1 then b.价格 else null end) '价格1',
    min(case when a.菜号 = 2 then a.数量 else null end) '数量2',
    min(case when a.菜号 = 2 then b.菜名 else null end) '菜名2',
    min(case when a.菜号 = 2 then b.价格 else null end) '价格2',
    min(case when a.菜号 = 3 then a.数量 else null end) '数量3',
    min(case when a.菜号 = 3 then b.菜名 else null end) '菜名3',
    min(case when a.菜号 = 3 then b.价格 else null end) '价格3',
    min(case when a.菜号 = 4 then a.数量 else null end) '数量4',
    min(case when a.菜号 = 4 then b.菜名 else null end) '菜名4',
    min(case when a.菜号 = 4 then b.价格 else null end) '价格4',
    min(case when a.菜号 = 5 then a.数量 else null end) '数量5',
    min(case when a.菜号 = 5 then b.菜名 else null end) '菜名5',
    min(case when a.菜号 = 5 then b.价格 else null end) '价格5',
    min(case when a.菜号 = 6 then a.数量 else null end) '数量6',
    min(case when a.菜号 = 6 then b.菜名 else null end) '菜名6',
    min(case when a.菜号 = 6 then b.价格 else null end) '价格6',
    min(case when a.菜号 = 7 then a.数量 else null end) '数量7',
    min(case when a.菜号 = 7 then b.菜名 else null end) '菜名7',
    min(case when a.菜号 = 7 then b.价格 else null end) '价格7',
    min(case when a.菜号 = 8 then a.数量 else null end) '数量8',
    min(case when a.菜号 = 8 then b.菜名 else null end) '菜名8',
    min(case when a.菜号 = 8 then b.价格 else null end) '价格8',
    min(case when a.菜号 = 9 then a.数量 else null end) '数量9',
    min(case when a.菜号 = 9 then b.菜名 else null end) '菜名9',
    min(case when a.菜号 = 9 then b.价格 else null end) '价格9',
    min(case when a.菜号 = 10 then a.数量 else null end) '数量10',
    min(case when a.菜号 = 10 then b.菜名 else null end) '菜名10',
    min(case when a.菜号 = 10 then b.价格 else null end) '价格10'
    from #流水帐 a
    inner join #菜单 b ON a.菜单 = b.菜单
    inner join #翻桌帐 c ON a.流水号 = c.流水号
    group by a.流水号,c.日期,c.桌号,c.人数
    order by c.日期 desc ,c.桌号
    drop table #翻桌帐
    drop table #流水帐
    drop table #菜单