zoukankan      html  css  js  c++  java
  • SQL时间计算timediff,timestampdiff,datediff,日期获取interval

    时间差函数:

    timestampdiff

    语法:timestampdiff(interval, datetime1,datetime2)

    结果:返回(时间2-时间1)的时间差,结果单位由interval参数给出。

    • frac_second 毫秒(低版本不支持,用second,再除于1000)
    • second 秒
    • minute 分钟
    • hour 小时
    • day 天
    • week 周
    • month 月
    • quarter 季度
    • year 年

      注意:MySQL 5.6之后才支持毫秒的记录和计算,如果是之前的版本,最好是在数据库除datetime类型之外的字段,再建立用于存储毫秒的int字段,然后自己进行转换计算。

    # 所有格式
    SELECT TIMESTAMPDIFF(FRAC_SECOND,'2012-10-01','2013-01-13'); # 暂不支持
    SELECT TIMESTAMPDIFF(SECOND,'2012-10-01','2013-01-13'); # 8985600
    SELECT TIMESTAMPDIFF(MINUTE,'2012-10-01','2013-01-13'); # 149760
    SELECT TIMESTAMPDIFF(HOUR,'2012-10-01','2013-01-13'); # 2496
    SELECT TIMESTAMPDIFF(DAY,'2012-10-01','2013-01-13'); # 104
    SELECT TIMESTAMPDIFF(WEEK,'2012-10-01','2013-01-13'); # 14
    SELECT TIMESTAMPDIFF(MONTH,'2012-10-01','2013-01-13'); # 3
    SELECT TIMESTAMPDIFF(QUARTER,'2012-10-01','2013-01-13'); # 1
    SELECT TIMESTAMPDIFF(YEAR,'2012-10-01','2013-01-13'); # 0

    datediff

    语法:传入两个日期参数,比较DAY天数,第一个参数减去第二个参数的天数值

    SELECT DATEDIFF('2013-01-13','2012-10-01');# 104

    timediff

    语法:timediff(time1,time2)

    结果:返回两个时间相减得到的差值,time1-time2

    SELECT TIMEDIFF('2018-05-21 14:51:43','2018-05-19 12:54:43');# 49:57:00

    其他日期函数

    • now()函数返回的是当前时间的年月日时分秒
    • curdate()函数返回的是年月日信息
    • curtime()函数返回的是当前时间的时分秒信息
    • 对一个包含年月日时分秒日期格式化成年月日日期,可以使用DATE(time)函数
      # 其他日期函数
      SELECT NOW(); # 2018-05-21 14:41:00
      SELECT CURDATE(); # 2018-05-21
      SELECT CURTIME(); # 14:41:38
      SELECT DATE(NOW()); # 2018-05-21
      SELECT SYSDATE(); # 2018-05-21 14:47:11
      SELECT CURRENT_TIME(); # 14:51:30
      SELECT CURRENT_TIMESTAMP; # 2018-05-21 14:51:37
      SELECT CURRENT_TIMESTAMP(); # 2018-05-21 14:51:43

      注意:now()与sysdate()类似,只不过now()在执行开始时就获取,而sysdate()可以在函数执行时动态获取。

    • interval的说明:

      1、当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果为4;

      原理:10为被比较数,后面1,3,5,7为比较数,将后面四个依次与10比较,看后面数字组有多少个少于10,则返回其个数。前提是后面数字组为从小到大排列,否则返回结果0。

      2、当关键词使用时,表示为设置时间间隔,常用在date_add()与date_sub()函数里,如:interval 1 day ,解释为将时间间隔设置为1天。

      本月第一天

      select date_add(curdate(), interval - day(curdate()) + 1 day);

      本月最后一天

      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 date_sub(curdate(), interval 1 month);

      上月今天的当前时间(时间戳) 

      select unix_timestamp(date_sub(now(),interval 1 month));

      获取当前时间与上个月之间的天数

      select datediff(curdate(), date_sub(curdate(), interval 1 month));

      作者:dazzlingly

      链接:https://www.jianshu.com/p/1de4b0dfbce0
      来源:简书
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    工具资源系列之给 windows 虚拟机装个 mac
    工具资源系列之 github 上各式各样的小徽章从何而来?
    php 学习笔记之日期时间操作一箩筐
    2018-12-03 VS Code英汉词典插件v0.0.7-尝试词性搭配
    2018-11-29 VS Code英汉词典插件v0.0.6-改为TS实现, 加测试
    2018-11-27 中文代码示例之Programming in Scala笔记第七八章
    2018-11-23 手工翻译Vue.js源码:尝试重命名标识符与文本
    2018-11-21 手工翻译Vue.js源码第一步:14个文件重命名
    2018-11-16 中文代码示例之Programming in Scala笔记第四五六章
    2018-11-13 中文代码示例之Programming in Scala学习笔记第二三章
  • 原文地址:https://www.cnblogs.com/87060524test/p/11647976.html
Copyright © 2011-2022 走看看