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

      之前一直想开个博记录一下自己,但总能找到各种理由来推脱,不是打游戏就是打游戏,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值