Mysql 分割字符串,一行变多行,@rownum,mysql.help_topic

news2024/11/20 12:39:56

1 前言

    朋友最近遇到一个比较棘手的 sql 问题,让我帮忙看看:

        他有两张表 testatestb ,一个表存的日期,另一个表存字符串例如 2023-11-01,2023-11-02,如何将这两张表关联起来,只查 testa 表的数据(关联的时候,其中只要在 testb 表中的字符串有这个日期,就要将 testa 表是这个日期的记录的所有字段都查出来)。

    我当时看的时候,觉得这个还挺简单的,想着用 in 或者 like 就行了,后发现都不是正解,于是便有了这篇文章产生。

2 建表和插入测试数据

## testa 表 (每个日期一条数据,日期的格式含秒)
CREATE TABLE `testa` (
  `operator_id` int NOT NULL,
  `stat_date` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

## testb 表(多个日期一条数据,日期以英文字符分隔,日期是 YYYY-MM-DD 形式)
CREATE TABLE `testb` (
  `operator_id` int NOT NULL,
  `rectify_date` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `testa` (`operator_id`, `stat_date`) VALUES (11, '2024-01-03 00:00:00');
INSERT INTO `testa` (`operator_id`, `stat_date`) VALUES (11, '2024-01-04 00:00:00');
INSERT INTO `testa` (`operator_id`, `stat_date`) VALUES (11, '2024-01-02 00:00:00');
INSERT INTO  testb  (`operator_id`, `rectify_date`) VALUES (11, '2024-01-02,2024-01-04');

3 查询语句

## rectify_date为需要拆分的字段
select a.operator_id, a.stat_date from testa a , 
      ( SELECT @rownum := @rownum + 1 as rownum ,
                       t2.operator_id as operator_id,
	                   SUBSTRING_INDEX(SUBSTRING_INDEX(t2.rectify_date, ',', t3.help_topic_id + 1), ',', - 1) as rectify_date
        FROM (SELECT @rownum := 0) t1 , testb t2 
		JOIN mysql.help_topic t3 ON t3.help_topic_id < (LENGTH(t2.rectify_date) - LENGTH(REPLACE(t2.rectify_date, ',', '')) + 1) 
		 ) b 
where SUBSTR(a.stat_date,1,10) = b.rectify_date

在这里插入图片描述

4 涉及知识点

4.1 @rownum

自定义变量,通过赋值语句 @rownum:=@rownum + 1 来累加达到递增行号的需求。
( @rownum 是自定义变量而不是 Mysql 的函数,所以名字是可以随便取的比如 @rowNo @aaa @bbb 皆可。)

4.2 help_topic

系统自带的辅助表,mysql.help_topic 表的 id 特点是从 0 开始递增,最大为 681
详见《mysql.help_topic 数量/最大值上限查询》

4.3 SUBSTRING

字符串截取,SUBSTRING(str,pos,len)

  • str 要截取的字符串
  • pos 开始截取字符串的下标位置
  • len 需要截多长

4.4 SUBSTRING_INDEX

切割字符串,SUBSTRING_INDEX(str,delim,count)

  • str 表示要进行分割的字符串
  • delim 表示分割符
  • count表示要返回的子串的个数

5 总结

  • 总体上来说,还是挺简单的,主要是依靠一张辅助表,将一行有规律的数据拆分成多行。然后再配合一些常用函数来做切割;
  • 也可以考虑放在 java 代码中的 for 循环处理实现,不过数据量较大的情况下,会很吃 java 内存。java 和 数据库两个层面处理,各有利弊,具体看哪块的资源比较多,自行参考即可;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1375277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MES数据采集在制造业的应用

MES设备数据采集的流程包括以下几个步骤&#xff1a; 1. 设备接入&#xff1a;将设备接入MES系统&#xff0c;建立设备与MES系统之间的连接。 2. 数据采集&#xff1a;通过传感器和采集器等设备&#xff0c;采集设备运行数据和状态信息。 3. 数据存储&#xff1a;将采集到的设…

如何给字符串字段添加索引

MySQL是支持前缀索引的&#xff0c;可以定义字符串的一部分作为索引&#xff0c;如果创建索引的语句不指定前缀长度&#xff0c;那么索引就会包含整个字符串。 alter table SUser add index index1(email);alter table SUser add index index2(email(6)); 如上两个创建索引的语…

快速了解VR全景拍摄技术运用在旅游景区的优势

豆腐脑加了糖、烤红薯加了勺&#xff0c;就连索菲亚大教堂前都有了“人造月亮”&#xff0c;在这个冬季&#xff0c;“尔滨”把各地游客宠上了天。面对更多的游客无法实地游玩&#xff0c;哈尔滨冰雪世界再添新玩法&#xff0c;借助VR全景拍摄技术对冬季经典冰雪体验项目进行全…

机器学习_9、朴素贝叶斯

朴素贝叶斯解决鸢尾花数据集问题 #高斯朴素贝叶斯分类 #codingutf-8 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB import numpy as np# 导入数据集&#xff0c;并查看数据特征…

ssm+vue的城投公司企业人事管理系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的城投公司企业人事管理系统设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#x…

华为鸿蒙凉了?谣言还是

华为鸿蒙系统凉了吗&#xff1f;我们从目前的一系列新闻来看。鸿蒙并没有凉&#xff0c;反而愈发强大。从下面的一些新闻事实可以看出华为鸿蒙已经和Android、ios形成竞争对手了。 1、华为宣布鸿蒙4.0的发布 2023年7月&#xff0c;华为开发者大会上正式宣布。华为发布了备受期…

springboot摄影跟拍预定管理系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

2024年1月1日孙溟㠭篆刻艺术展开幕式于北京大学北大书店成功举办

“印记青春——会说话的石头” 主题文化展盛大开幕 2024年1月1日正值新年伊始&#xff0c;由北京大学出版社、北大书店、不黑文化艺术学社、中国诗书画研究会三才书画院联合举办的“印记 青春——会说话的石头”主题篆刻艺术展&#xff0c;在北京大学新太阳学生中心拉开帷幕。 …

base64与BytesIO图片进行编码、解码;api调用

base64与BytesIO简单介绍 io.BytesIO 和 Base64 编码都是用于在内存中处理二进制数据的方法&#xff0c;但它们的目的和使用场景有所不同。 1&#xff09; io.BytesIO io.BytesIO 是 Python io 库中的一个类&#xff0c;它提供了一个在内存中处理二进制数据的接口&#xff0…

【排序】快速排序(C语言实现)

文章目录 前言1. Hoare思想2. 挖坑法3. 前后指针法4. 三路划分5. 快速排序的一些小优化5.1 三数取中常规的三数取中伪随机的三数取中 5.2 小区间优化 6. 非递归版本的快排7. 快速排序的特性总结 前言 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其…

设计模式之组合模式【结构型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

Python expandtabs()与endswith()方法

Python expandtabs()方法 描述 Python expandtabs() 方法把字符串中的 tab 符号(\t)转为空格&#xff0c;默认的空格数 tabsize 是 8。 语法 expandtabs()方法语法&#xff1a; string.expandtabs(tabsize8) 参数 tabsize -- 指定转换字符串中的 tab 符号(\t)转为空格的字…

边缘计算AI智能分析网关V4算力分析及应用场景

一、硬件介绍 智能分析网关V4是TSINGSEE青犀视频推出的一款高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;硬件采用BM1684芯片&#xff0c;集成高性能8核ARM A53&#xff0c;主频高达2.3GHz。硬件内置近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、…

msvcr120.dll是什么?msvcr120.dll丢失要怎么去修复?

随着计算机技术的不断发展&#xff0c;我们在使用软件或游戏时经常会遇到各种错误提示&#xff0c;其中找不到msvcr120.dll就是一种常见的错误。那么&#xff0c;msvcr120.dll是什么&#xff1f;它的作用是什么&#xff1f;如何修复msvcr120.dll丢失的问题&#xff1f;本文将为…

20个很棒的SEO博客和网站

搜索引擎优化 &#xff08;SEO&#xff09; 标准在不断变化。与社交媒体、电子邮件营销和人工智能 &#xff08;AI&#xff09; 等新兴技术一样&#xff0c;搜索引擎正在改进它们每天向用户提供结果的方式。 为此&#xff0c;他们专注于本地化、页面权限、点击率&#xff0c;甚…

数据结构与算法之美学习笔记:46 | 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?

目录 前言算法解析总结引申 前言 本节课程思维导图&#xff1a; 上一节我们讲到&#xff0c;如何用位图、布隆过滤器&#xff0c;来过滤重复的数据。今天&#xff0c;我们再讲一个跟过滤相关的问题&#xff0c;如何过滤垃圾短信&#xff1f; 垃圾短信和骚扰电话&#xff0c;我…

【MYSQL】MYSQL 的学习教程(十二)之 MySQL 啥时候用记录锁,啥时候用间隙锁

在「读未提交」和「读已提交」隔离级别下&#xff0c;都只会使用记录锁&#xff1b;而对于「可重复读」隔离级别来说&#xff0c;会使用记录锁、间隙锁和 Next-Key 锁 那么 MySQL 啥时候会用记录锁&#xff0c;啥时候会用间隙锁&#xff0c;啥时候又会用 Next-Key 锁呢&#xf…

美客多本土店与跨境店有何区别?本土店如何入驻运营?

美客多被誉为“拉美亚马逊”&#xff0c;作为拉美地区最大的跨境电商平台&#xff0c;吸引了不少跨境电商卖家入驻。但在入驻过程中也会遇到一个问题&#xff0c;本土店与跨境店分别是什么&#xff1f;有何区别&#xff1f;应该选择本土店还是跨境店入驻呢&#xff1f;下面为你…

使用YOLOv5训练自己的数据集 --- 老鼠识别

方式一&#xff1a;YOLOv5开源地址&#xff1a;https://github.com/ultralytics/yolov5/blob/master/README.zh-CN.md 方式二&#xff1a;YOLOv5源码&#xff1a;https://pan.baidu.com/s/12khk-Wkc5_J5ho4oZ7_FhA?pwdxtru 安装环境依赖包&#xff1a; 项目目录地址栏中输入…

MobaXterm游戏讲解

前言 没想到吧&#xff0c;这里还有游戏&#xff0c;以下是玩法 玩法 注 点击Type可以自由更改地图大小 1.Netwalk 这个游戏是用鼠标点击每一个格子&#xff0c;进行旋转方向&#xff0c;使得所有方块连接接来&#xff0c;全部变成亮蓝色 2.Mines 这个就是扫雷了&#xff…