mysql自定义函数-----剔除固定时间周期

xiaoxiao2021-02-28  34

      之前一直想开个博记录一下自己,但总能找到各种理由来推脱,不是打游戏就是打游戏,O(∩_∩)O哈哈~。今天正好这边天气比较阴沉,不想出去,其实平时天气好也不想出去0.0,看了一段Netty权威指南,感觉自身对io和nio这块还是很欠缺,有点云里雾里的感觉,就翻了几遍博客,突然感觉闲着也是闲着,就开始搞一个博客吧。因为之前下载和浏览工作所需东西的原因,注册了csdn,正好有账号,那就在这里开始吧,等会写完第一篇,高中的小伙伴还叫着去一块包饺子,当然我只是去了杀后场,只为吃哦。

      好了,言归正传,因为之前项目所需,有个工单时长剔除需求,看了前人写的函数,有点问题,剔除时间不太准,所以自己就写了一个。至于为什么要在第一篇放这个呢,因为之前写的一些东东或者好的想法没有记录,只记得这个了,希望从今天开始,把平时看的知识和自己的感悟记录在这里,以供自己回忆,同时也希望对各位有点帮助。下面是语句:

DELIMITER $$ USE `wmsdb`$$ DROP FUNCTION IF EXISTS `getTimeOfOrderDeleteNight`$$ CREATE DEFINER=`wms`@`%` FUNCTION `getTimeOfOrderDeleteNight`(StartTime DATETIME,EndTime DATETIME) RETURNS VARCHAR(32) CHARSET utf8 BEGIN -- 计算所有工单的处理时长,去除晚上的18:00~第二天的8点,即工作时间为每天的8:00~18:00. -- make Of kiven_jia -- 工单时长 DECLARE orderTimeLong VARCHAR(32); -- 开始时间 DECLARE orderStartTime VARCHAR(32); -- 结束时间 DECLARE orderEndTime VARCHAR(32); IF SUBSTRING(StartTime, 12, 2)>=0 AND SUBSTRING(StartTime, 12, 2)<8 THEN SET orderStartTime = DATE_FORMAT(StartTime,'%Y-%m-%d 08:00:00'); ELSEIF SUBSTRING(StartTime, 12, 2)>=18 AND SUBSTRING(StartTime, 12, 2)<=23 THEN SET orderStartTime = DATE_ADD(DATE_FORMAT(StartTime,'%Y-%m-%d 08:00:00'),INTERVAL +1 DAY); ELSEIF SUBSTRING(StartTime, 12, 2)>=8 AND SUBSTRING(StartTime, 12, 2)<18 THEN SET orderStartTime = DATE_FORMAT(StartTime,'%Y-%m-%d %H:%i:%s'); END IF; IF SUBSTRING(EndTime, 12, 2)>=0 AND SUBSTRING(EndTime, 12, 2)<8 THEN SET orderEndTime = DATE_FORMAT(EndTime,'%Y-%m-%d 08:00:00'); ELSEIF SUBSTRING(EndTime, 12, 2)>=18 AND SUBSTRING(EndTime, 12, 2)<=23 THEN SET orderEndTime = DATE_ADD(DATE_FORMAT(EndTime,'%Y-%m-%d 08:00:00'),INTERVAL +1 DAY); ELSEIF SUBSTRING(EndTime, 12, 2)>=8 AND SUBSTRING(EndTime, 12, 2)<18 THEN SET orderEndTime = DATE_FORMAT(EndTime,'%Y-%m-%d %H:%i:%s'); END IF; IF SUBSTRING(orderStartTime, 9, 2) = SUBSTRING(orderEndTime, 9, 2) THEN SET orderTimeLong = TIMESTAMPDIFF(MINUTE,orderStartTime,orderEndTime); ELSEIF SUBSTRING(orderStartTime, 9, 2) != SUBSTRING(orderEndTime, 9, 2) THEN SET orderTimeLong = TIMESTAMPDIFF(MINUTE,orderStartTime,orderEndTime) - (TIMESTAMPDIFF(DAY,SUBSTRING(orderStartTime, 1, 10),SUBSTRING(orderEndTime, 1, 10)))*840; END IF; RETURN orderTimeLong; END$$ DELIMITER ;

      大概就是这样,每个业务不同,时间格式不同,使用起来可能会有问题,因为我只测试了我这边的业务,如果您遇到问题,请留言,我会尽最大努力为您解决。

       最后希望大家拍砖轻一点,毕竟第一次0.0

转载请注明原文地址: https://www.6miu.com/read-2624538.html

最新回复(0)