MySQL-日期时间函数

本文最后更新于:January 2, 2023 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

MySQL常用内置日期函数:

函数 描述
NOW() 返回当前日期和时间。
CURDATE() 返回当前日期。
CURTIME() 返回当前时间
DATE() 提取日期或日期时间表达式的日期部分。
DAY() 返回月份中的一天(0-31)。
DAYNAME() 返回工作日的名称。
MONTH() 返回经过日期(1-12)的月份。
MONTHNAME() 返回月份的名称。
YEAR() 返回年份。
DATE_FORMAT() 以其他格式显示日期和时间值。
EXTRACT() 提取日期的一部分。
DATE_ADD() 将指定的时间值(或间隔)添加到日期值。
DATE_SUB() 从日期值中减去指定的时间值(或间隔)。
DATEDIFF() 返回两个日期之间的天数

注意:这些函数返回的日期和时间是运行数据库服务器实例的计算机的日期和时间。

TO_DAYS()

TO_DAYS()函数:返回从0000年(公元1年)至当前日期的总天数。

实例:输出当前日期(2023-01-02)对应的天数:

1
select TO_DAYS(NOW()); # 738887

常用

  • 今天的数据
1
select * from 表名 where to_days(时间字段名) = to_days(now());

时间字段不需要加单引号,直接字段名称即可。

  • 昨天的数据
1
select * from 表名 where TO_DAYS( NOW( ) ) - TO_DAYS(时间字段名) <= 1 and TO_DAYS( NOW( ) ) - TO_DAYS(时间字段名) >0

必须要加上后面的大于0,否则结果就是今天和昨天的。

  • 近7天的数据
1
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)

DATE_SUB():从日期减去指定的时间间隔。详细见后面函数介绍。

CURDATE():返回当前的日期。详细见后面函数介绍。

  • 本月
1
select * from 表名 where DATE_FORMAT(时间字段名, '%Y%m' ) = DATE_FORMAT(CURDATE( ) , '%Y%m' )
  • 上一个月数据
1
select * from 表名 where PERIOD_DIFF(date_format(now( ) , '%Y%m' ) , date_format(时间字段名, '%Y%m' ) ) =1

PERIOD_DIFF():返回两个时间相差的月份数,注意它是前一个时间减后一个时间。日期格式:YYMM或YYYYMM。

  • 本季度数据
1
select * from 表名 where QUARTER(时间字段名)=QUARTER(now());

返回一个指定日期所在季度值。QUARTER() 函数的返回值介于 14 之间。如果参数为 NULLQUARTER() 函数将返回 NULL

  • 上一季度数据
1
select * from 表名 where QUARTER(时间字段名)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
  • 本年数据
1
select * from 表名 where YEAR(时间字段名)=YEAR(NOW());
  • 上一年数据
1
select * from 表名 where year(时间字段名)=year(date_sub(now(),interval 1 year));
  • 本周数据
1
select * from 表名 where YEARWEEK(date_format(时间字段名,'%Y-%m-%d')) = YEARWEEK(now());
  • 上一周数据
1
select * from 表名 where YEARWEEK(date_format(时间字段名,'%Y-%m-%d')) = YEARWEEK(now())-1;

DATE_SUB()

DATE_SUB()函数:从日期减去指定的时间间隔。返回一个时间。

语法:DATE_SUB(date,INTERVAL expr type)

  • date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。type 单位参数可以是下列值:
Type 值 描述
MICROSECOND 返回时间或日期时间表达式expr的微秒,这个数字范围为 0 到 999999
SECOND 返回时间秒值,范围为0〜59。
MINUTE 返回时间的分钟,范围为0至59。
HOUR 返回时间的小时部分。返回值的范围为0至23的小时值。然而,TIME值的范围实际上要大得多,所以HOUR可以返回大于23的值。
DAY 返回给定日期的月份的日期部分。
WEEK 返回日期的星期数
MONTH 返回日期的月份,取值范围为0〜12。
QUARTER 返回年份日期的季度值,范围为1〜4
YEAR 返回年份日期,范围为1000〜9999或0
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

示例:返回当前日期(2023-01-02)的前五天:

1
select DATE_SUB(now(),INTERVAL 5 DAY) # 2022-12-28 16:01:20

CURDATE()

CURDATE()函数:返回当前的日期。

示例:

1
select CURDATE(); # 2023-01-02

待补充….