热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL题目8:拆分逗号分隔的字符串

这个就直接把答案写在下面,想自己做的小伙伴可以不看下面的答案,自己尝试着

    这个就直接把答案写在下面,想自己做的小伙伴可以不看下面的答案,自己尝试着先做一下

    

ID
NAME
1
'张三,李四,王五'
2
'a,b,c,d,e'
    想要拆解成下面这样子:

ID
NAME
1
张三
1李四
1王五
2
a
2
b
2c
2d
2e

    话不多说,直接上代码,想做题的小伙伴就不用往下看了,直接关注我,想看答案的可以继续~

    刚开始编写文章,很多地方都有不足,希望以后可以为大家贡献出更好的文章,谢谢大家!有哪里不明白的地方可以和作者联系〜

    没有关注的也可以关注下公众号〜再次感谢

                    

    -----第一种方法
    -- 创建需要划分的字符串
    with T1 as(
    select 1 as id ,'张三,李四,王五' as name from dual
    union all
    select 2 as id ,'a,b,c,d,e' as name from dual
    ),

    -- 统计字符串中子串的个数
    -- 字符串中','字符用''代替后,其减少的长度自然就是原串中','字符的个数
    T2 as(
    select id,length(T1.name) - length(replace(T1.name, ',', '')) + 1
    as source_substring_count
    from T1),

    -- 根据子串的个数创建索引列,用于给T4的regexp_substr()方法索引
    T3 as(
    select id,rownum as row_number
    from dual, T2

    connect by rownum <= T2.source_substring_count),

    -- 根据每个索引值逐个截取字符串
    T4 as(
    select t1.id, T3.row_number as substring_index,
    regexp_substr(T1.name, '[^,]+', 1, T3.row_number) as substring
    from T1, T3)

    select id, substring_index, substring from T4
    where substring is not null

      -------第二种方法
      with tt as
      (
      select 1 as id, '张三,李四,王五' || ',' as name
      from dual
      union all
      select 2, 'a,b,c,d,e' || ',' from dual
      ),
      t1(id,
      name,
      lev) as
      (select id, substr(name, 1, instr(name, ',', 1, 1) - 1) as name, 1 as lev
      from tt
      union all
      select t.id,
      substr(t.name,
      instr(t.name, ',', 1, t1.lev) + 1,
      instr(t.name, ',', 1, t1.lev + 1) -
      instr(t.name, ',', 1, t1.lev) - 1) as name,
      lev + 1 as lev
      from t1
      inner join tt t
      on t1.id = t. id
      and instr(t.name, ',', 1, t1.lev + 1) > 0)
      select id, name, lev from t1


        ------第三种方法
        with tt as
        (select 1 as id, '张三,李四,王五' || ',' as name
        from dual
        union all
        select 2, 'a,b,c,d,e' || ',' from dual),
        t1(id,
        name,
        lev) as
        (select id, regexp_substr(name, '[^,]+', 1, 1) as name, 1 as lev
        from tt
        union all
        select t.id,
        regexp_substr(t.name, '[^,]+', 1, lev + 1) as name,
        t1. lev + 1 as lev
        from t1
        inner join tt t
        on t1.id = t. id
        and instr(t.name, ',', 1, t1.lev+1) > 0)
        select id, name, lev from t1

        今天就到这里,有什么不明白可以联系我~~~



        推荐阅读
        • MySQL多表数据库操作方法及子查询详解
          本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
        • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
        • Java String与StringBuffer的区别及其应用场景
          本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
        • Mysql调优的顺序及面试问题总结
          文章目录一、调优相关1.第一步:本地explain线上查询遇到的第一个坑:遇到的第二个坑:2.第二步:覆盖索引3.第三步&# ... [详细]
        • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
        • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
        • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
        • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
        • 高质量SQL书写的30条建议
          本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
        • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
        • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
        • 本文介绍了在MySQL8.0中如何查看性能并解析SQL执行顺序。首先介绍了查询性能工具的开启方法,然后详细解析了SQL执行顺序中的每个步骤,包括from、on、join、where、group by、having、select distinct、union、order by和limit。同时还介绍了虚拟表的概念和生成过程。通过本文的解析,读者可以更好地理解MySQL8.0中的性能查看和SQL执行顺序。 ... [详细]
        • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
        • Spring特性实现接口多类的动态调用详解
          本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
        • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
        author-avatar
        王妮美的小姐姐
        这个家伙很懒,什么也没留下!
        PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
        Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有