本文将实例演示DATE_ADD函数用法。
DATE_ADD(date,INTERVAL exprtype)函数:返回与所给日期date相差INTERVAL时间段的日期。其中INTERVAL是间隔类型关键字,expr是一个表达式,这个表达式对应后面的类型,type是间隔类型,MySQL提供了13种间隔类型,如表所示。
表达式类型 | 描述 | 格式 |
HOUR | 小时 | hh |
MINUTE | 分 | mm |
SECOND | 秒 | ss |
YEAR | 年 | YY |
MONTH | 月 | MM |
DAY | 日 | DD |
YEAR_MONTH | 年和月 | YY-MM |
DAY_HOUR | 日和小时 | DD |
DAY_MINUTE | 日和分钟 | DD |
DAY_ | SECOND | 日和秒 |
HOUR_MINUTE | 小时和分 | hh:mm |
HOUR_SECOND | 小时和秒 | hh:ss |
MINUTE_SECOND | 分钟和秒 | mm:ss |
来看一个具体的例子,在这个例子中第1列返回了当前日期时间,第2列返回距离当前日期31天后的日期时间,第3列返回距离当前日期一年两个月后的日期时间。
示例1:
mysql> select now() current,date_add(now(),INTERVAL 31 day) after31days, -> date_add(now(),INTERVAL '1_2' year_month) after_oneyear_twomonth; +---------------------+---------------------+------------------------+ | current | after31days | after_oneyear_twomonth | +---------------------+---------------------+------------------------+ | 2016-11-22 13:47:53 | 2016-12-23 13:47:53 | 2018-01-22 13:47:53 | +---------------------+---------------------+------------------------+ 1 row in set (0.00 sec) |
同样也可以用负数让它返回之前的某个日期时间,如下第 1 列返回了当前日期时间,第 2列返回距离当前日期31天前的日期时间,第3列返回距离当前日期一年两个月前的日期时间。
示例2:
mysql> select now() current,date_add(now(),INTERVAL -31 day) after31days, -> date_add(now(),INTERVAL '-1_-2' year_month) after_oneyear_twomonth; +---------------------+---------------------+------------------------+ | current | after31days | after_oneyear_twomonth | +---------------------+---------------------+------------------------+ | 2016-11-22 13:49:08 | 2016-10-22 13:49:08 | 2015-09-22 13:49:08 | +---------------------+---------------------+------------------------+ 1 row in set (0.00 sec) |
下面的例子计算出当前距离2020年2月2日还有多少天:
示例3:
mysql> select DATEDIFF('2020-02-02',now()); +------------------------------+ | DATEDIFF('2020-02-02',now()) | +------------------------------+ | 1167 | +------------------------------+ 1 row in set (0.04 sec) |