文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【SQL】按特定字符分割一行转多行

2023-08-19 13:26

关注

原表如下:

with t1 as(    select 1 as id, "a,b" as course    union    select 2 as id, "a,b,c" as course    union    select 3 as id, null as course    union    select 4 as id, "c" as course)select * from t1;
idcourse
1a,b
2a,b,c
3NULL
4c

需要将 course 按照 ‘,‘ 拆分成下表:

idcourse
1a
1b
2a
2b
2c
3NULL
4c

方法如下:

with t1 as(    select 1 as id, "a,b" as course    union    select 2 as id, "a,b,c" as course    union    select 3 as id, null as course    union    select 4 as id, "c" as course)select    t1.id,    substring_index(substring_index(t1.course, ',', b.help_topic_id + 1), ',', -1) as coursefrom t1 join mysql.help_topic bon b.help_topic_id < (length(t1.course) - length(replace(t1.course, ',', '')) + 1)union allselect id, coursefrom t1where course is null

这里主要用到 substring_index 和 mysql.help_topic。

substring_index

SUBSTRING_INDEX 是字符串截取函数。

SUBSTRING_INDEX(str, delim, count)

例如:

SELECT SUBSTRING_INDEX('a*b*c*d', '*', 1);  -- 返回: aSELECT SUBSTRING_INDEX('a*b*c*d', '*', 2);  -- 返回: a*b SELECT SUBSTRING_INDEX('a*b*c*d', '*', 3);  -- 返回: a*b*cSELECT SUBSTRING_INDEX('a*b*c*d', '*', 4);  -- 返回: a*b*c*dSELECT SUBSTRING_INDEX('a*b*c*d', '*', -1); -- 返回: dSELECT SUBSTRING_INDEX('a*b*c*d', '*', -2); -- 返回: c*dSELECT SUBSTRING_INDEX('a*b*c*d', '*', -3); -- 返回: b*c*dSELECT SUBSTRING_INDEX('a*b*c*d', '*', -4); -- 返回: a*b*c*d
mysql.help_topic

help_topic 本身是 MySQL 一个帮助解释注释表,用于解释 MySQL 各种专有名词,由于这张表数据 ID 是从 0 顺序增加的,方便我们用于计数,但是 8.0.17 版本的只有 686 条数据,超过这个数字,我们就需要己自定义一张表。

可以用做计数的临时表,查询的语句只会用 help_topic 计数,超出的部分其实都是脏数据。

如果不需要展开成多行,只需要计数,则可以将 ‘,‘ 替换成空,计算字符串的长度差。

selectid, length(course) - length(replace(course, ',', '')) + 1 as cntfrom t1

结果如下:

idcnt
12
23
3NULL
41

来源地址:https://blog.csdn.net/weixin_45545090/article/details/127109668

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯