本帖最后由 abcdv2012 于 2010-12-10 11:19:44 编辑

解决方案 »

  1.   

    我晕怎么格式变形了啊再贴一下:表中共有两个字段title和content,其内容如下:title     content
    A         J|K|M|Y
    B         N|P|Y|Z
    C         G
    D         Q|Y如何得到如下内容:title     content
    A         J
    A         K
    A         M
    A         Y
    B         N
    B         P
    B         Y
    B         Z
    C         G
    D         Q
    D         Y即,遇到|则截取,然后形成一个新行。多谢!!
      

  2.   

    IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
    GO
    CREATE TABLE TB
    (
      TITLE VARCHAR(5),
      CONTENT VARCHAR(50)
    )
    INSERT INTO TB
    SELECT 'A','J|K|M|Y' UNION ALL
    SELECT 'B','N|P|Y|Z' UNION ALL
    SELECT 'C','G'       UNION ALL
    SELECT 'D','Q|Y'SELECT a.TITLE ,CONTENT = substring(a.CONTENT , b.number , charindex('|' , a.CONTENT + '|' , b.number) - b.number) 
    FROM TB a JOIN MASTER..spt_values b on b.type='p' and b.number between 1 and len(CONTENT)
    where substring('|'+CONTENT,b.number,1)='|';with tt as 
    (select TITLE,CONTENT=cast(left(CONTENT,charindex('|',CONTENT+'|')-1) as nvarchar(100)),Split=cast(stuff(CONTENT+'|',1,charindex('|',CONTENT+'|'),'') as nvarchar(100)) from tb
    union all
    select TITLE,CONTENT=cast(left(Split,charindex('|',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex('|',Split),'') as nvarchar(100)) from tt where split>''
    )
    select TITLE,CONTENT from tt order by TITLE option (MAXRECURSION 0)
      

  3.   

    多谢楼上。我用的是sql 2000 personal。出现错误提示:服务器: 消息 156,级别 15,状态 1,行 16
    在关键字 'with' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 21
    第 21 行: 'MAXRECURSION' 附近有语法错误。
      

  4.   

    看链接http://blog.csdn.net/wufeng4552/archive/2009/09/09/4534365.aspx
      

  5.   

    --> 测试数据: #tb
    if object_id('tempdb.dbo.#tb') is not null drop table #tb
    go 
    create table #tb (title varchar(11),content varchar(111) )
    insert into #tb
    select 'A','J|K|M|Y' union all
    select 'B','N|P|Y|Z' union all
    select 'C','G'  union all
    select 'D','Q|Y' Select
        a.title,content=substring(a.content,b.number,charindex('|',a.content+'|',b.number)-b.number) 
    from 
        #tb a join master..spt_values  b 
        ON B.type='p' AND B.number BETWEEN 1 AND LEN(A.content)
    where
         substring('|'+a.content,b.number,1)='|'
    title       content
    ----------- ---------------------------------------------------------------------------------------------------------------
    A           J
    A           K
    A           M
    A           Y
    B           N
    B           P
    B           Y
    B           Z
    C           G
    D           Q
    D           Y(11 行受影响)
      

  6.   

    if not object_id('tb') is null
    drop table tb
    Go
    Create table tb([title] nvarchar(1),[content] nvarchar(7))
    Insert tb
    select N'A',N'J|K|M|Y' union all
    select N'B',N'N|P|Y|Z' union all
    select N'C',N'G' union all
    select N'D',N'Q|Y'
    Go
    SELECT 
    a.[title],
    [content]=SUBSTRING(a.[content],number,CHARINDEX('|',a.[content]+'|',number)-b.number)
    FROM tb a
    JOIN master..spt_values b
      ON b.type='p' 
       AND CHARINDEX('|','|'+a.[content],number)=number
    /*
    title content
    ----- -------
    A     J
    A     K
    A     M
    A     Y
    B     N
    B     P
    B     Y
    B     Z
    C     G
    D     Q
    D     Y(11 row(s) affected)
    */