首页 > 数据库 >mysql 字段逗号分割行转列操作

mysql 字段逗号分割行转列操作

时间:2023-05-10 12:56:00浏览次数:39  
标签:topic help text 逗号 转列 mysql id name

一、需求

某字段的值为 7654,7698,7782,7788

期望的效果:

 二、实现语句

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num
FROM mysql.help_topic
WHERE help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1;

 三、知识点

1、mysql.help_topic 这个是什么?

    mysql.help_topic 是 MySQL 数据库系统中的一个系统表,用于存储关于数据库、表、列等对象的帮助主题信息。

   这里只用到 help_topic_id(帮助主题 ID) 这一个字段,这里实际只需要一个数字的序列,自己生成一个不用mysql.help_topic也完全没问题。

  如果不是root用户需要赋权限 GRANT SELECT ON mysql.help_topic TO 'youruser'@'%'
  flush privileges;

  查询看看是什么样的数据(我们需要的就是第一列这个序号)

2、函数 字符串拆分: SUBSTRING_INDEX(str, delim, count)

参数解说 解释
str      需要拆分的字符串
delim    分隔符,通过某字符进行拆分
count    当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符。

 例子:获取第2个以逗号为分隔符之前的所有字符。

四、实际语句

CREATE TABLE  test_t  (
   id 		INT   	     AUTO_INCREMENT		 , 
   name         VARCHAR(40)  			 		 ,  
   text  	VARCHAR(800)  					 ,  
  PRIMARY KEY ( id )
) ENGINE=INNODB DEFAULT CHARSET=UTF8; 

 插入数据

INSERT INTO `neirongdb`.`test_t` (`id`, `name`, `text`) VALUES ('1', '张三', '苹果');
INSERT INTO `neirongdb`.`test_t` (`id`, `name`, `text`) VALUES ('2', '李四', '香蕉,橘子');
INSERT INTO `neirongdb`.`test_t` (`id`, `name`, `text`) VALUES ('3', '王五', '西瓜,橙子,葡萄');

 查询语句:

SELECT a.id,
       a.name, 
       substring_index(substring_index(a.text, ',', b.help_topic_id + 1), ',', - 1) AS text
FROM test_t a INNER JOIN mysql.help_topic b
    ON b.help_topic_id < (length(a.text) - length(REPLACE(a.text, ',', '')) + 1);

 效果:

 

标签:topic,help,text,逗号,转列,mysql,id,name
From: https://www.cnblogs.com/yclh/p/17387666.html

相关文章

  • MySQL学习
    1、初始MySQLJavaEE:企业级java开发Web前端(页面:展示,数据!)后台(连接点:连接数据库JDBC,连接前端(控制,控制视图跳转,和给前端传递数据)(Spring等框架实现)数据库(存数据,Txt,Excel,word)1.1、为什么学习数据库1.岗位需求2.现在的世界,大数据时代~,得数据库者的天下3.被迫需求:存数据4.数据......
  • MySQL 5.7 解压版安装教程 [Windows]
    前言谨以此记录MySQL安装过程中的各种问题及安装步骤(好像这是我的第一条博客?)一、MySQL的版本选择压缩版(.zip)与安装版(.msi)对比二者的安装方式一样简便,相较压缩版MySQL,安装版MySQL不能指定安装位置,而安装版的好处便是具有可视化安装界面(虽然是全英文),对新手较为友好(不过也......
  • MySQL
    Slave_IO_State:WaitingformastertosendeventMaster_Host:12.12.12.12Master_User:slaveMaster_Port:3307Connect_Retry:60Master_Log_File:mysql-bin.......
  • chatgpt帮我创建一个由go+mysql+jwt+gorm搭建的restapi
    好的,下面是一个简单的由go+mysql+jwt+gorm搭建的RESTAPI示例:首先,你需要创建一个新的Go模块。你可以使用如下命令来创建一个名为example的新模块:gomodinitexample接下来,你需要安装需要的依赖库,使用以下命令进行安装:gogetgithub.com/gorilla/muxgogetgithub.com/jinzhu......
  • MySQL DROP TABLE
    DROPTABLE的堆栈#0row_drop_table_from_cache(tablename=0x7f7d580295b0"db/t",table=0x7f7d58008b20,trx=0x7f7e50c0b150)at/root/mysql-5.7.32/storage/innobase/row/row0mysql.cc:4179#10x00000000019fdb12inrow_drop_table_for_mysql(name=0x7f7d......
  • 如何进行MySQL源码调试(一条select语句的执行流程)
    一、背景MySQL是当今世上最受欢迎的使用最广泛的开源数据库,它的繁荣离不开它的开源特性。放在过去商业数据库的时代,大家都没有机会接触到数据库的源代码,但在如今开源数据库的时代,越来越多的人开始研究数据库的源码,并给社区贡献代码,MySQL官方每次发布新版本都要感谢一些在社区上贡......
  • MySQL(二十二)其他数据库日志(二)bin log二进制日志
    MySQL(二十二)其他数据库日志(二)binlog二进制日志binlog二进制日志binlog即binarylog,二进制日志,也叫做变更日志它记录所有更新数据的DDL和DML语句,但是不包含没有修改数据的语句(如Select、show等),以事件的形式记录保存在二进制文件中可以用于主从服务器之间的数据同步......
  • MySQL(二十二)其他数据库日志(一)通用查询日志和错误日志
    MySQL(二十二)其他数据库日志(一)通用查询日志和错误日志1MySQL支持的日志1.1日志类型慢查询日志:记录执行时间超过long_query_time的所有查询,方便我们对查询进行优化通用查询日志:记录所有连接的起始和终止时间,以及连接发送给数据库的所有指令,对复原操作的实际场景、发现问题......
  • Method com/mysql/jdbc/JDBC4ResultSet.getObject(Ljava/lang/String;Ljava/lang/Clas
      mybatis-plus生成的日期类型默认是localdatetime,数据库是datetime,按道理转换应该可以,我又不想把实体类转换成date查看依赖<--locadate/locadatetime的时间依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-ty......
  • KingbaseES V8R6运维案例之---MySQL和KingbaseES字符串排序规则对比
    案例说明:相同数据排序后查询,在MySQL和KingbaseES下得到的排序顺序不一致,本案例从MySQL和KingbaseES的排序规则分析,两种数据库排序的异同点。适用版本:KingbaseESV8R6、MySQL8.0一、MySQL的排序规则1、排序规则(collation)排序规则是依赖于字符集,字符集是用来定义MySQL存储不......