mysql split 字符串
使用mysql 要处理 带逗号的字符串,比如: “1,2,3,4,5”,变成一列一列
1 |
2 |
3 |
4 |
5 |
处理:
网上搜了下,查了下,没有直接可以用的方法,都是用help_topic表来处理的。使用help_topic时为了解决行转列的问题。
常见的是:
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
扔到本地执行,报错:
错误代码: 1142
SELECT command denied to user 'myDatabase' for table 'help_topic'
去本地mysql 查了下 help_topic 表格
SELECT * FROM help_topic;
对应的是h_id 。 重新修改上面的语句:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',h_id+1),',',-1) AS num
FROM help_topic
WHERE h_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1
得到想要的结果。
实际使用
环节信息表:
CREATE TABLE `tache_info` (`tch_id` bigint(20) NOT NULL COMMENT '环节id', `person` varchar(4000) COMMENT '处理人员。多个逗号隔开',`created_date` datetime NULL DEFAULT NULL COMMENT '环节创建时刻', `finish_date` datetime NULL DEFAULT NULL COMMENT '环节结束时刻',PRIMARY KEY (`tch_id`)
) COMMENT = '环节信息表' ;
要求: 根据人员,统计环节滞留情况: 滞留环节总数、平均滞留时长(总滞留时长/总环节数)
处理思路:
1,人员处理:人员是tache_info 里面的person字段,里面可能是多个人员,多个的用逗号隔开,需要行换列,用上面那个办法。
2,计算滞留时长: 滞留的话,finish_date 是空的,用 “当前时间-环节创建时间”:
mysql 计算时间差-到秒
SELECT TIMESTAMPDIFF(SECOND,t.`begin_date`,t.`finish_date`) diff_sec
FROM tache_info t LIMIT 0 , 10;
当前时间:
SELECT TIMESTAMPDIFF(SECOND,t.`begin_date`, NOW()) diff_secFROM tache_info t LIMIT 0 , 10;
处理:
插入数据:
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('1','1','0822-05-08 14:46:39','0822-05-08 14:46:39');
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('2','1','0822-05-08 14:46:42','0822-05-08 15:04:44');
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('3','22,33','0822-05-08 15:04:44',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('4','44,55','0822-05-08 17:02:00',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('5','22,33','0822-05-08 17:02:00',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('6','44,55','0822-05-08 17:18:39',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('7','66,77','0822-05-08 17:45:07',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('8','55,66','0822-05-08 17:45:07',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('9','55,66,77','0822-05-08 17:48:06',NULL);
INSERT INTO `tache_info` (`tch_id`, `person`, `created_date`, `finish_date`) VALUES('10','55,66,33','0822-05-08 17:48:06',NULL);
分离人员和计算滞留时间:
SELECT t.`tch_id`, t.`created_date`, t.`finish_date`,
TIMESTAMPDIFF(SECOND,t.`created_date`, NOW()) diff_sec,SUBSTRING_INDEX(SUBSTRING_INDEX(t.person,',',h_id + 1),',' ,- 1) deal_person
FROMhelp_topic, tache_info t
WHERE h_id < (LENGTH(t.person)) - LENGTH(REPLACE (t.person, ',', '')) + 1
AND finish_date IS NULL;
统计个人滞留环节总数、平均滞留时长(总滞留时长/总环节数):
SELECT COUNT(DISTINCT tch_id), SUM(diff_sec)/COUNT(DISTINCT tch_id), deal_person FROM (SELECT t.`tch_id`, t.`created_date`, t.`finish_date`, TIMESTAMPDIFF(SECOND,t.`created_date`, NOW()) diff_sec,SUBSTRING_INDEX(SUBSTRING_INDEX(t.person,',',h_id + 1),',' ,- 1) deal_person
FROMhelp_topic, tache_info t
WHERE h_id < (LENGTH(t.person)) - LENGTH(REPLACE (t.person, ',', '')) + 1
AND finish_date IS NULL
) AS tch_group GROUP BY deal_person;
总结:
mysql分离字符串,需要使用help_topic表作为辅助来处理。具体的字段,根据实际的来写就行。
mysql split 字符串相关推荐
- MySQL实现字符串逗号分割split并获取长度
问题描述 数据库中有些数据以半角逗号 , 为分隔符,需要获取分割后的值或长度 -- 创建表 CREATE TABLE `person` (`id` int(11) NOT NULL AUTO_INCR ...
- .net mysql字符串截取_【MySQL】字符串截取之SUBSTRING_INDEX和【MySQL】字符串四则运算...
substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数 例子:str=www.google.com 1.count是正数,那么就 ...
- mysql split 逗号分隔_mysql split函数用逗号分隔的实现
1:定义存储过程,用于分隔字符串 DELIMITER $$ USE `mess`$$ DROP PROCEDURE IF EXISTS `splitString`$$ CREATE DEFINER=` ...
- mysql处理字符串的两个绝招:substring_index,concat
感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,速度贼快,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) ...
- mysql将字符串字段转为数字排序或比大小
SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...
- Split字符串分割函数
非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg"Dim arrTest arrT ...
- mysql的字符串函数
对于针对字符串位置的操作,第一个位置被标记为1. 1.ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysq ...
- mysql从字符串中取子字符串_如何从开始于MySQL中特定位置的字符串中提取子字符串?...
为此,您可以使用该mid()方法.以下是语法-select mid(yourColumnName, yourPositionToStart, yourEndValue) as anyAliasName ...
- MySQL填充字符串函数 LPAD(str,len,padstr),RPAD(str,len,padstr)
转: MySQL填充字符串函数 LPAD(str,len,padstr),RPAD(str,len,padstr) LPAD(str,len,padstr) 用字符串 padstr对 str进行左边填 ...
最新文章
- linux获取后台进程的控制台数据
- node 常见的一些系统问题
- linux下svn重新定位的方法
- 目前成熟的计算机安全技术,计算机安全危害特点研究(共2389字).doc
- 2019ICPC(上海) - Counting Sequences I(dfs打表)
- 模式学习(1):Decorator装饰者模式
- 使用CImage绘制半透明图片
- Windows server常见操作、问题
- 一张图彻底了解Unity脚本的生命周期
- idea下载源码出现:Cannot download sources Sources not found for: org.apache.kafka:kafka-clients:2.3.0
- 牛x!一个比传统数据库快 100-1000 倍的数据库!
- 整数划分之四 【区间dp】讲解于思考方法
- 小觅双目相机陀螺仪静态数据输出为0+timeshift ubuntu 系统备份
- 这款打怪升级的小游戏,7 年前出生于 GitHub 社区,如今在谷歌商店有 8 万人打了满分
- 基于环信的开源即时通讯项目
- 奔驰首秀L4自动驾驶:100万最贵电动车展示最豪华「AI代客泊车」
- 我要有女朋友肯定带她吃完这上面所有的小吃(很便宜哥们儿们行动起来吧)
- 【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络
- UEStudio09.20.0.1007 注册码
- 【数据格式化】数字货币加逗号隔开
热门文章
- 商业数据分析从入门到入职(9)Python网络数据获取
- python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
- android局域网聊天毕业设计,Android基于wifi模块的局域网聊天以及文件传输app
- 学习地图配色:以制作省行政区划图+常住人口密度分布图为例
- casio pb-700简单使用basic语言编程并编译执行(运行)(希望能给你提供便利)
- 《UEFI内核导读》如果没有内存,程序代码还能不能执行?
- 如何使用Mega cc
- 傅立叶分析导论-7有限傅立叶分析
- 如何在Flash里面使用魔术棒工具
- HCL配置防火墙WEB方式登录实验