暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL时间函数(用于统计表调用)

我的摸鱼之路 2021-04-18
648

    工作中,总是要制作各种各样的统计表,周报、月报、年报。还要统计上上周跟上周对比数据,即使已经写好了SQL查询语句并保存,但还是免不了要手动输入日期时间范围,为此还得查询下日历,上周一是几月几号,上个月是否有31日。所以制作了个函数,方便在每个查询统计表的sql语句里调用,无须频繁输入时间。



一、函数介绍

函数名:A_statstime

参数:

lwb(last week begin,即上周一的0点0分0秒)

lwe(last week end,即上周日的23点59分59秒)

lwb(last last week begin,即上上周 周一的0点0分0秒)

lwe(last last week end,即上上周 周日的23点59分59秒)

lyb(last year begin,即去年1月1日的0点0分0秒)

lye(last year end,即去年12月31日的23点59分59秒)

lmb(last month begin,即上个月1日的0点0分0秒)

lme(last month end,即上个月最后一天的23点59分59秒)

nyb(now yeaar begin,即本年度1月1日的0点0分0秒)

nmb(now month begin,即本月1日的0点0分0秒)

ne(now end,即实时,现在时间)

t(自定义,你输入什么时间,它就返回什么时间)


很好记~~


二、函数调用

@b_time=A_statstime(参数)

@e_time=A_statstime(参数)

先在SQL语句开头将函数赋予给b_time和e_time(放在开头也是以便一打开保存的SQL语句,就可以立马看到之前设置的统计日期范围,并可以直接修改参数,何况很多sql语句很长,需要往下翻查找,很不方便)并输入参数。然后将sql语句中'between.....and.....'等时间的查询参数替换一下 ,变成 

between @b_time  and @e_time


这样每次需要统计时,就直接打开之前保存的sql语句,直接执行就好了,无须再输入时间,倘若是突然要求统计奇葩时间段的数据,比如说要“上个月17日下午3点至23日早上10点的数据,像这种不规则的时间段,我们也只需在开头的函数里直接输入yyyy-MM-dd HH:mm:ss格式的时间就好,因为有个自定义参数t,输入什么,它就返回什么,无须滑动鼠标往下翻去查找


    CREATE DEFINER=`root`@`%` FUNCTION `sszwfw`.`A_statstime`(t char(20)) RETURNS varchar(51) CHARSET utf8
    BEGIN
    IF t='lwb' THEN #上周开始时间
    RETURN date_format(date_sub(curdate(),interval date_format(curdate(),'%w')-1+7 day),'%Y-%m-%d 00:00:00');

    ELSEIF t='lwe' THEN #上周结束时间
    RETURN date_format(date_sub(curdate(),interval date_format(curdate(),'%w')-7+7 day),'%Y-%m-%d 23:59:59');


    ELSEIF t='llwb' THEN #上上周开始时间
    RETURN date_format(date_sub(curdate(),interval date_format(curdate(),'%w')-1+14 day),'%Y-%m-%d 00:00:00');


    ELSEIF t='llwe' THEN #上上周结束时间
    RETURN date_format(date_sub(curdate(),interval date_format(curdate(),'%w')-7+14 day),'%Y-%m-%d 23:59:59');


    ELSEIF t='lyb' THEN #去年开始时间
    RETURN concat(date_format(curdate(),'%Y')-1,'-01-01 00:00:00');


    ELSEIF t='lye' THEN #去年结束时间
    RETURN concat(date_format(curdate(),'%Y')-1,'-12-31 23:59:59');


    ELSEIF t='lmb' THEN #上个月开始时间
    RETURN concat(date_add(curdate()-day(curdate())+1,interval -1 month),' 00:00:00');


    ELSEIF t='lme' THEN #上个月结束时间
    RETURN concat(last_day(date_sub(curdate(),interval 1 month)),' 23:59:59');


    ELSEIF t='nyb' THEN #今年开始时间
    RETURN concat(year(curdate()),'-01-01 00:00:00');


    ELSEIF t='nmb' THEN #本月开始时间
    return DATE_FORMAT( CURDATE(), '%Y-%m-01 00:00:00');

    ELSEIF t='ne' THEN #实时
    RETURN now();


    ELSEIF t=t THEN #自定义
    RETURN t;
    END IF;
    END



    文章转载自我的摸鱼之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论