• 拆分字段中的字符串


    需求: 现有一表,如图所示:

    要求,将表中的数据按如下格式显示出来:

    /*
    结果
    1 张三 a
    2 张三 b
    3 张三 c
    4 张三 d
    5 张三 e
    2 李四 a
    2 李四 b
    2 李四 c
    */

    这个问题是在CSDN上找到的,当时,也很郁闷,不过其中有一个牛人用了四种方法写出来了,所以做个笔记。

    create table tb(id int,[name] VARCHAR(60),value varchar(30))
    insert into tb values(1,'张三','a,b,c,d,e')
    insert into tb values(2,'李四','a,b,c')
    GO
    
    --1.使用临时表
    SELECT TOP 100 id = IDENTITY(int, 1, 1) INTO #tb FROM syscolumns a, syscolumns b 
    SELECT B.id,A.[name], [value]=SUBSTRING(A.[value], B.id, CHARINDEX(',', A.[value] + ',', B.id) - B.id)
    FROM [tb] A, #tb B
    WHERE SUBSTRING(',' + A.[value], B.id, 1) = ',' 
    group by [value],[name],B.id 
    
    --2.不使用临时表
    select a.id ,a.[name], value = substring(a.value , b.number , charindex(',' , a.value + ',' , b.number) - b.number)  
    from tb a join master..spt_values b  
    on b.type='p' and b.number between 1 and len(a.value)
    where substring(',' + a.value , b.number , 1) = ','
    
    --3.使用XML
    SELECT A.id,A.[name], B.value FROM
        SELECT id,[name], 
            [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') 
        FROM tb
    ) A OUTER APPLY
    (
        SELECT 
            [value] = N.v.value('.', 'varchar(100)') 
        FROM A.[value].nodes('/root/v') N(v)
    ) B
    
    --4.使用CET
    ;with tt as  
    (
        select id,[name],
            [value]=cast(left([value],charindex(',',[value]+',')-1) as nvarchar(100)),
            Split=cast(stuff([value]+',',1,charindex(',',[value]+','),'') as nvarchar(100))
        from tb
    union all
        select id,[name],
            [value]=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),
            Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) 
        from tt where split>''
    )
    select id,[name],[value] from tt order by id option (MAXRECURSION 0)

    如有好的方法,请大牛继续贴留到恢复贴上。

  • 相关阅读:
    R函数
    R 读取excel的方法
    R 数据框的操作
    R apply()函数
    怎么更改Rstudio中的默认目录
    【转】R函数-diag()函数
    《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框
    IDEA快速创建maven项目
    idea 在创建maven时没有src的解决方法
    maven编译 出现Process terminated
  • 原文地址:https://www.cnblogs.com/acoll/p/2729387.html
Copyright © 2020-2023  润新知