MySQL最全时间日期操作

说道MySQL查询,会发现有很多需求都需要n天前或者某一段时间范围内的数据,以下是日常慢慢累积下来常用的SQL讲解,如有补充请留言,感谢

觉得有用可以收藏保存哦

了解函数 (直接看使用)

  1. NOW()
    返回当前的日期和时间 时间格式Y-m-d H:i:s
    在这里插入图片描述

  2. CURDATE()
    返回当前的日期 格式为Y-m-d
    在这里插入图片描述

  3. CURTIME()
    返回当前的时间 格式为H:i:s
    在这里插入图片描述

  4. YEAR()
    获取传入时间的 年
    在这里插入图片描述

  5. MONTH()
    获取传入时间的 月
    在这里插入图片描述

  6. DAY()
    获取传入时间的 日
    在这里插入图片描述

  7. HOUR()
    获取传入时间的 时
    在这里插入图片描述

  8. MINUTE()
    获取传入时间的 分
    在这里插入图片描述

  9. SECOND()
    获取传入时间的 秒
    在这里插入图片描述

  10. QUARTER()
    传入时间是本年度的第几个季度(3个月为一个季度)

  11. TIME()
    获取传入时间的 时分秒
    在这里插入图片描述

  12. DATE()
    用于格式化一个时间为YYYY-MM-DD的格式
    在这里插入图片描述

  13. TO_DAYS()
    返回从0开始到传入日期的天数
    在这里插入图片描述

  14. WEEK()
    获取是本年的第几周
    在这里插入图片描述

  15. YEARWEEK()
    获取是本年和是本年第几周
    在这里插入图片描述

  16. LAST_DAY()
    返回月份中的最后一天

  17. DATE_ADD()
    给日期添加指定的时间间隔
    为负则减少日期,为正增加时间
    时间间隔可选填
    YEAR(年)、MONTH(月)、DAY(日)
    MOHOUR(时)、MINUTE(分)、SECOND(秒)
    WEEK (周)、QUARTER(季)
    在这里插入图片描述

  18. DATE_SUB()
    从日期减去指定的时间间隔
    为正则减少日期,为负增加时间
    时间间隔可选填
    YEAR(年)、MONTH(月)、DAY(日)
    MOHOUR(时)、MINUTE(分)、SECOND(秒)
    WEEK (周)、QUARTER(季)
    在这里插入图片描述

  19. DATEDIFF()
    返回两个日期之间的天数
    前面大后面小(正数),前面小后面大(负数)
    在这里插入图片描述

  20. DATE_FORMAT()
    格式化传入的时间为指定格式(多用于格式化某个字段的时间)
    在这里插入图片描述

  21. UNIX_TIMESTAMP()
    传入的时间转为 时间戳格式
    在这里插入图片描述

  22. FROM_UNIXTIME()
    传入时间戳和格式 将时间戳转化为字符串时间
    在这里插入图片描述

一些格式化参数说明

在这里插入图片描述
在这里插入图片描述

使用

为了方便理解,假设现在有一张表(table),其中的时间字段为(time)时间格式为
Y-m-d H:i:s

注意
本文使用的tabletime两个命名仅为了简化才使用,请勿用到真正的项目中,不然就会很刺激 滑稽.jpg
说明
本文中数据库针对的time字段的数据类型为字符串类型,
如果你存的类型是时间戳可以使用FROM_UNIXTIME(time, '%Y-%m-%d %H:%i:%s')函数将时间戳转化为字符串类型在食用
或者使用UNIX_TIMESTAMP("2020-07-21 10:30:11")函数将日期转为时间戳在食用

基本有了全部应用场景的例子,需要精确到 年、月、日或着 时、分、秒等需要自己去上面看一下相对应的函数呦

  • 本日
    SELECT * FROM `table` WHERE DATE(time) = DATE(NOW());
    SELECT * FROM `table` WHERE TO_DAYS(time) = TO_DAYS(NOW());
    
  • 昨日
    SELECT * FROM `table` WHERE TO_DAYS( NOW( ) ) - TO_DAYS(time) <= 1
    #如果time的格式已经是Y-m-d格式的,前面的time就不需要在加DATE方法辣
    SELECT * FROM `table` WHERE DATE(time) =  DATE( DATE_SUB(NOW( ),INTERVAL 1 DAY)) 
    
  • 最近7天
    SELECT * FROM `table` where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(time)
    
  • 最近30天
    SELECT * FROM `table` where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= DATE(time)
    
  • 本周
    SELECT * FROM `table` WHERE YEARWEEK(time) = YEARWEEK(NOW());
    
  • 上周
    SELECT * FROM `table` WHERE YEARWEEK(time) = YEARWEEK(NOW())-1;
    
  • 本月
    SELECT * FROM `table` WHERE DATE_FORMAT( time, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
    SELECT * FROM `table`  WHERE DATE_FORMAT( time,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')
    
  • 上月
    SELECT * FROM `table` WHERE PERIOD_DIFF( DATE_FORMAT( NOW( ) , '%Y%m' ) , DATE_FORMAT( time, '%Y%m' ) ) =1
    SELECT * FROM `table` WHERE DATE(time) = DATE(DATE_SUB(NOW(),INTERVAL 1 MONTH))
    
  • 本季度
    SELECT * FROM `table` WHERE QUARTER(time)=QUARTER(NOW());
    
  • 上季度
    SELECT * FROM `table` WHERE  QUARTER(time)=QUARTER(DATE_SUB(NOW(),INTERVAL 1 QUARTER));
    
  • 6个月前
    SELECT * FROM `table` WHERE time BETWEEN DATE_SUB(now(),INTERVAL 6 MONTH) AND NOW();
    
  • 本年
    SELECT * FROM `table` WHERE YEAR(time)=YEAR(NOW());
    
  • 上一年
    SELECT * FROM `table` WHERE  YEAR(time)=YEAR(date_sub(now(),INTERVAL 1 YEAR));
    
  • 某时间段
    #每日7点到13点
    SELECT * FROM table WHERE MOHOUR(time) BETWEEN 7 AND 13 
    # 2020-07-01 到 2020-07-20
    SELECT * FROM table WHERE DATE(time) BETWEEN "2020-07-01" AND "2020-07-30" 
    
  • 指定某时间
    #某年某月
    SELECT * FROM `table` WHERE DATE_FORMAT(time,'%Y-%m')='2020-7'
    SELECT * FROM `table` WHERE DATE_FORMAT(time,'%Y-%m')=DATE_FORMAT('2020-07-21','%Y-%m')
    #所有的7月
    SELECT * FROM `table` WHERE MONTH(time)) = 7
    
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值