广告
返回顶部
首页 > 资讯 > 数据库 >【SQL】按特定字符分割一行转多行
  • 922
分享到

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

sql数据库mysql 2023-08-19 13:08:49 922人浏览 独家记忆
摘要

原表如下: with t1 as( select 1 as id, "a,b" as course uNIOn select 2 as id, "a,b,c" as course unio

原表如下:

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)
  • str : 表示需要拆分的字符串
  • delim : 表示分隔符,通过某字符进行拆分
  • count : 当 count 为正数,取第 n 个分隔符之前的所有字符;当 count 为负数,取倒数第 n 个分隔符之后的所有字符。

例如:

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 计数,超出的部分其实都是脏数据。

  • help_topic_id:帮助主题详细信息在表记录中对应的 ID;
  • name:帮助主题给定的关键字名称,与 help_keyWord 表中的 name 字段值相等;
  • help_cateGory_id:帮助主题类别 ID,与 help_category 表中的 help_category_id 字段值相等;
  • description:帮助主题的详细信息(这里就是我们通常查询帮助信息真正想看的内容,例如:告诉我们某某语句如何使用的语法与注意事项等);
  • example:帮助主题的示例信息(这里告诉我们某某语句如何使用的示例);
  • url:该帮助主题对应在 MySQL 官方在线手册中的URL链接地址。

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

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

结果如下:

idcnt
12
23
3NULL
41

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

您可能感兴趣的文档:

--结束END--

本文标题: 【SQL】按特定字符分割一行转多行

本文链接: https://www.lsjlt.com/news/375466.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql中coalesce的用法
    coalesce 函数返回指定的非空值,如果所有值均为 null,则返回指定的默认值。用法:1. 获取第一个非空值;2. 提供默认值;3. 级联检查多个值。注意事项:仅返回第一个非空值,...
    99+
    2024-04-29
  • sql中删除一列的命令
    在 sql 中,使用 alter table 语句可以删除一列,语法为:alter table table_name drop column column_name;步骤包括:① 指定要...
    99+
    2024-04-29
  • sql中修改数据的命令
    sql 中使用 update 和 delete 命令修改数据:update 命令更新现有记录,语法为:update table_name set column1 = value...
    99+
    2024-04-29
  • sql中修改表的命令
    sql 中修改表的命令有:alter table:执行各种修改表操作。add column:添加新列。drop column:删除列。modify column:修改列的类型、约束或默认...
    99+
    2024-04-29
  • 在sql中删除视图用什么命令
    sql 中用于删除视图的命令是 drop view,语法为 drop view view_name;,其中 view_name 是视图的名称。删除视图不会删除其基础表中的数据,也不应删除...
    99+
    2024-04-29
  • sql中删除一个视图的命令
    sql 中删除视图的命令为:drop view [schema_name.]view_name;。此命令将删除名为 view_name 的视图(位于模式 schema_name 中),但...
    99+
    2024-04-29
  • 在sql中as什么意思
    as 在 sql 中分配表达式、子查询或表的别名,使复杂查询结果易于理解。别名语法为:select as from ,其中 可以是列、表达式或子查询, 为分配的别名。优点...
    99+
    2024-04-29
  • sql中using是什么意思
    sql 中 using 关键字用于连接表,通过指定一个参与连接的列来指定连接条件。它只允许按一个列连接表,因此当 join 条件涉及一个列时,它提供了简洁易读的语法。 SQL 中 US...
    99+
    2024-04-29
  • mysql中删除表的语句
    mysql 中删除表的语句是:drop table table_name; 它将永久删除表及其数据,注意操作不可逆。此语句不适用于视图或临时表,应分别使用 drop view 和 dro...
    99+
    2024-04-29
    mysql
  • mysql中删除一个表的命令
    mysql 中删除表命令:drop table。语法:drop table table_name。用法:1. 连接数据库;2. 输入命令:drop table table_name;3....
    99+
    2024-04-29
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作