zoukankan      html  css  js  c++  java
  • 拆分字段中的字符串

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

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

    /*
    结果
    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)

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

  • 相关阅读:
    JVM 的主要组成部分及其作用
    一天一个 Linux 命令(5):pwd命令
    算法-经典趣题-马踏棋盘(又称骑士周游)
    SAP HANA Schemas 和 HDI Containers
    如何手动下载并安装 Visual Studio Code 的 SAP Fiori tools
    一个最简单的 Github workflow 例子
    SAP UI5 初学者教程之七
    最近看的动漫和电影
    关于工作,干了这碗鸡汤
    啊啊啊啊啊啊
  • 原文地址:https://www.cnblogs.com/acoll/p/2729387.html
Copyright © 2011-2022 走看看