• 时间处理及interval函数运用 方木


    MySql时间操作
    1.interval的说明
    1.1、当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果4;
    原理:10为被比较数,后面1,3,5,7为比较数,将后面四个依次与10比较,看后面数字组有多少个少于10,则返回其个数。前提是后面数字组为从小到大排列,否则返回结果0。
    1.2、当关键词使用时,表示为设置时间间隔,常用在date_add()与date_sub()函数里,
    如:interval 1 day ,解释为将时间间隔设置为1天。

    2.语法示例:
    2.1、今天

    SELECT DATE_FORMAT(NOW(),’%Y-%m-%d 00:00:00’) AS ‘今天开始’;
    SELECT DATE_FORMAT(NOW(),’%Y-%m-%d 23:59:59’) AS ‘今天结束’;

    2.2、 昨天

    SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), ‘%Y-%m-%d 00:00:00’) AS ‘昨天开始’;
    SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 DAY), ‘%Y-%m-%d 23:59:59’) AS ‘昨天结束’;

    2.3、本周

    SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), ‘%Y-%m-%d 00:00:00’) AS ‘本周一’;
    SELECT DATE_FORMAT( DATE_ADD(SUBDATE(CURDATE(), WEEKDAY(CURDATE())), INTERVAL 6 DAY), ‘%Y-%m-%d 23:59:59’) AS ‘本周末’;

    2.4、 上周

    SELECT DATE_FORMAT( DATE_SUB( DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 WEEK), ‘%Y-%m-%d 00:00:00’) AS ‘上周一’;
    SELECT DATE_FORMAT( SUBDATE(CURDATE(), WEEKDAY(CURDATE()) + 1), ‘%Y-%m-%d 23:59:59’) AS ‘上周末’;

    2.5、 本月

    SELECT DATE_FORMAT( CURDATE(), ‘%Y-%m-01 00:00:00’) AS ‘本月初’;
    SELECT DATE_FORMAT( LAST_DAY(CURDATE()), ‘%Y-%m-%d 23:59:59’) AS ‘本月末’;

    2.6、 上月

    SELECT DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL 1 MONTH), ‘%Y-%m-01 00:00:00’) AS ‘上月初’;
    SELECT DATE_FORMAT( LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH)), ‘%Y-%m-%d 23:59:59’) AS ‘上月末’;

    2.7、 本年第一天

    SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY)

    concat(year(now()),’-01-01’)//当前年份的第一天
    concat(year(now()),’-12-31’)//当前年份的最后一天

    2.8、 月份处理

    本月第一天
    select date_add(curdate(), interval - day(curdate()) + 1 day);
    今天是当月的第几天:SELECT DAYOFMONTH( NOW());

    本月最后一天
    select last_day(curdate());

    上月第一天
    select date_add(curdate()-day(curdate())+1,interval -1 month);

    上月最后一天
    select last_day(date_sub(now(),interval 1 month));

    下月第一天
    select date_add(curdate()-day(curdate())+1,interval 1 month);

    下月最后一天
    select last_day(date_sub(now(),interval -1 month));

    本月天数
    select day(last_day(curdate()));

    上月今天的当前日期
    select date_sub(curdate(), interval 1 month);
    上月今天的当前时间 (时间戳)
    select unix_timestamp(date_sub(now(),interval 1 month));

    获取当前时间与上月时间的天数
    select datediff(curdate(), date_sub(curdate(), interval 1 month));

    2.9、 日期处理

    ----时间差换算
    SELECT
    TIME_TO_SEC(TIMEDIFF(‘2018-09-30 19:38:45’, ‘2018-08-23 10:13:01’)) AS DIFF_SECOND1, – 秒
    UNIX_TIMESTAMP(‘2018-09-30 19:38:45’)-UNIX_TIMESTAMP(‘2018-08-23 10:13:01’) AS DIFF_SECOND2, – 秒
    TIMESTAMPDIFF(SECOND,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_SECOND3, – 秒
    TIMESTAMPDIFF(MINUTE,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_MINUTE, – 分
    TIMESTAMPDIFF(HOUR,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_HOUR, – 小时
    TIMESTAMPDIFF(DAY ,‘2018-08-23 10:13:01’,‘2018-09-30 19:38:45’) AS DIFF_DATE1, – 天
    DATEDIFF(‘2018-09-30 19:38:45’,‘2018-08-23 10:13:01’) AS DIFF_DATE2, – 天
    TIMESTAMPDIFF(MONTH,‘2018-08-23 10:13:01’,‘2018-09-25 19:38:45’) AS DIFF_MONTH, – 月
    TIMESTAMPDIFF(YEAR,‘2018-08-23 10:13:01’,‘2020-07-25 19:38:45’) AS DIFF_YEAR – 年
    FROM DUAL;

    日期增加年,月,天,小时,分,秒
    select date_add(日期, interval 1 day); 日期加天
    select date_add(日期, interval 1 hour); 日期加小时
    select date_add(日期, interval 1 minute); 日期加分
    select date_add(日期, interval 1 second);日期加秒
    select date_add(日期, interval 1 microsecond); 日期加微秒
    select date_add(日期, interval 1 week); 日期加周
    select date_add(日期, interval 1 month); 日期加月
    select date_add(日期, interval 1 quarter); 日期加季度
    select date_add(日期, interval 1 year); 日期加年

    日期普遍处理
    当年第一天:
    SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY);

    当年最后一天:
    SELECT concat(YEAR(now()),’-12-31’);

    当前week的第一天:
    select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY);

    当前week的最后一天:
    select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 5 DAY);

    前一week的第一天:
    select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 8 DAY);

    前一week的最后一天:
    select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 2 DAY);

    前两week的第一天:
    select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 15 DAY);

    前两week的最后一天:
    select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 9 DAY);

    当前month的第一天:
    SELECT concat(date_format(LAST_DAY(now()),’%Y-%m-’),‘01’);

    当前month的最后一天:
    SELECT LAST_DAY(now());

    前一month的第一天:
    SELECT concat(date_format(LAST_DAY(now() - interval 1 month),’%Y-%m-’),‘01’);

    前一month的最后一天:
    SELECT LAST_DAY(now() - interval 1 month);

    前两month的第一天:
    SELECT concat(date_format(LAST_DAY(now() - interval 2 month),’%Y-%m-’),‘01’);

    前两month的最后一天:
    SELECT LAST_DAY(now() - interval 2 month);

    当前quarter的第一天:
    select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-3 month),’%Y-%m-’),‘01’);

    当前quarter的最后一天:
    select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-1 month);

    前一quarter的第一天:
    select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-6 month),’%Y-%m-’),‘01’);

    前一quarter的最后一天:
    select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-4 month);

    前两quarter的第一天:
    select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-9 month),’%Y-%m-’),‘01’);

    前两quarter的最后一天:
    select LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-7 month);

  • 相关阅读:
    NanoProfiler
    NanoProfiler
    Open Source Cassandra Gitbook for Developer
    Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
    Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
    Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
    Android Fragment使用(一) 基础篇 温故知新
    Set up Github Pages with Hexo, migrating from Jekyll
    EventBus源码解析 源码阅读记录
    Android M Permission 运行时权限 学习笔记
  • 原文地址:https://www.cnblogs.com/leon507/p/16351124.html
Copyright © 2020-2023  润新知