使用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 字符串相关推荐

  1. MySQL实现字符串逗号分割split并获取长度

    问题描述 数据库中有些数据以半角逗号 , 为分隔符,需要获取分割后的值或长度 -- 创建表 CREATE TABLE `person` (`id` int(11) NOT NULL AUTO_INCR ...

  2. .net mysql字符串截取_【MySQL】字符串截取之SUBSTRING_INDEX和【MySQL】字符串四则运算...

    substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数 例子:str=www.google.com 1.count是正数,那么就 ...

  3. mysql split 逗号分隔_mysql split函数用逗号分隔的实现

    1:定义存储过程,用于分隔字符串 DELIMITER $$ USE `mess`$$ DROP PROCEDURE IF EXISTS `splitString`$$ CREATE DEFINER=` ...

  4. mysql处理字符串的两个绝招:substring_index,concat

    感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,速度贼快,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) ...

  5. mysql将字符串字段转为数字排序或比大小

    SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ...

  6. Split字符串分割函数

    非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg"Dim arrTest arrT ...

  7. mysql的字符串函数

    对于针对字符串位置的操作,第一个位置被标记为1. 1.ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysq ...

  8. mysql从字符串中取子字符串_如何从开始于MySQL中特定位置的字符串中提取子字符串?...

    为此,您可以使用该mid()方法.以下是语法-select mid(yourColumnName, yourPositionToStart, yourEndValue) as anyAliasName ...

  9. MySQL填充字符串函数 LPAD(str,len,padstr),RPAD(str,len,padstr)

    转: MySQL填充字符串函数 LPAD(str,len,padstr),RPAD(str,len,padstr) LPAD(str,len,padstr) 用字符串 padstr对 str进行左边填 ...

最新文章

  1. linux获取后台进程的控制台数据
  2. node 常见的一些系统问题
  3. linux下svn重新定位的方法
  4. 目前成熟的计算机安全技术,计算机安全危害特点研究(共2389字).doc
  5. 2019ICPC(上海) - Counting Sequences I(dfs打表)
  6. 模式学习(1):Decorator装饰者模式
  7. 使用CImage绘制半透明图片
  8. Windows server常见操作、问题
  9. 一张图彻底了解Unity脚本的生命周期
  10. idea下载源码出现:Cannot download sources Sources not found for: org.apache.kafka:kafka-clients:2.3.0
  11. 牛x!一个比传统数据库快 100-1000 倍的数据库!
  12. 整数划分之四 【区间dp】讲解于思考方法
  13. 小觅双目相机陀螺仪静态数据输出为0+timeshift ubuntu 系统备份
  14. 这款打怪升级的小游戏,7 年前出生于 GitHub 社区,如今在谷歌商店有 8 万人打了满分
  15. 基于环信的开源即时通讯项目
  16. 奔驰首秀L4自动驾驶:100万最贵电动车展示最豪华「AI代客泊车」
  17. 我要有女朋友肯定带她吃完这上面所有的小吃(很便宜哥们儿们行动起来吧)
  18. 【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络
  19. UEStudio09.20.0.1007 注册码
  20. 【数据格式化】数字货币加逗号隔开

热门文章

  1. 商业数据分析从入门到入职(9)Python网络数据获取
  2. python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
  3. android局域网聊天毕业设计,Android基于wifi模块的局域网聊天以及文件传输app
  4. 学习地图配色:以制作省行政区划图+常住人口密度分布图为例
  5. casio pb-700简单使用basic语言编程并编译执行(运行)(希望能给你提供便利)
  6. 《UEFI内核导读》如果没有内存,程序代码还能不能执行?
  7. 如何使用Mega cc
  8. 傅立叶分析导论-7有限傅立叶分析
  9. 如何在Flash里面使用魔术棒工具
  10. HCL配置防火墙WEB方式登录实验