MySQL date_add()函数​​​​​​​

转载自   MySQL date_add()函数

MySQL DATE_ADD函数简介

DATE_ADD函数将间隔时间添加到DATEDATETIME值。 下面说明了DATE_ADD函数的语法:

DATE_ADD(start_date, INTERVAL expr unit);

DATE_ADD函数有两个参数:

  • start_dateDATEDATETIME的起始值。
  • INTERVAL expr unit是要添加到起始日期值的间隔值。

根据参数,DATE_ADD函数可能会返回一个DATETIME值或一个字符串:

  • DATETIME - 如果第一个参数是DATETIME值,或者如果间隔值具有时间元素,如小时,分钟或秒等。
  • 否则返回字符串。

MySQL DATE_ADD函数示例

我们来看几个例子来了解DATE_ADD函数的工作原理。

示例-1 加1秒到时间:2017-12-31 23:59:59

mysql> SELECT DATE_ADD('2017-12-31 23:59:59', INTERVAL 1 SECOND) result;
+---------------------+
| result              |
+---------------------+
| 2018-01-01 00:00:00 |
+---------------------+
1 row in set

示例-2 - 添加1天到时间:2017-12-31 00:00:01

mysql> SELECT DATE_ADD('2017-12-31 00:00:01',INTERVAL 1 DAY) result;
+---------------------+
| result              |
+---------------------+
| 2018-01-01 00:00:01 |
+---------------------+
1 row in set

示例-3 - 在时间2017-12-31 23:59:59上加11秒。

mysql> SELECT DATE_ADD('2017-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) result;
+---------------------+
| result              |
+---------------------+
| 2018-01-01 00:01:00 |
+---------------------+
1 row in set

示例-4 - 在时间2000-01-01 00:00:00上加-15小时。

mysql> SELECT DATE_ADD('2000-01-01 00:00:00', INTERVAL '-1 5' DAY_HOUR) result;
+---------------------+
| result              |
+---------------------+
| 1999-12-30 19:00:00 |
+---------------------+
1 row in set

示例-5 - 添加1秒和999999微秒到时间:2017-12-31 23:59:59.000002

mysql> SELECT DATE_ADD('2017-12-31 23:59:59.000002',INTERVAL '1.999999' SECOND_MICROSECOND) result;
+----------------------------+
| result                     |
+----------------------------+
| 2018-01-01 00:00:01.000001 |
+----------------------------+
1 row in set

MySQL DATE_ADD函数使用说明

间隔处理

在间隔期间 -

INTERVAL expr unit

expr被视为一个字符串,因此,当为expr使用非字符串值时,您应该小心。 例如,间隔为HOUR_MINUTE5/2求值结果为2.5000(不是2.5),并被视为2小时5000分钟,如下面的语句所示:

mysql> SELECT DATE_ADD('2017-01-01', INTERVAL 5 / 2 HOUR_MINUTE) result;
+---------------------+
| result              |
+---------------------+
| 2017-01-04 13:20:00 |
+---------------------+
1 row in set

为了确保非串间隔值的正确解释,您应该使用CAST函数,如下所示:

mysql> SELECT DATE_ADD('2017-01-01', INTERVAL CAST(6/4 AS DECIMAL(3,1)) HOUR_MINUTE) result;
+---------------------+
| result              |
+---------------------+
| 2017-01-01 01:05:00 |
+---------------------+
1 row in set

自动DATETIME转换

如果您将时间值添加到日期值,则结果为DATETIME值,如以下示例所示:

mysql> SELECT DATE_ADD('2017-01-01', INTERVAL 12 HOUR) result;
+---------------------+
| result              |
+---------------------+
| 2017-01-01 12:00:00 |
+---------------------+
1 row in set

起始日期无效

如果对第一个参数使用无效的日期,DATE_ADD函数将返回NULL,例如:

mysql> SELECT DATE_ADD('2017-02-30', INTERVAL 1 DAY) result;
+--------+
| result |
+--------+
| NULL   |
+--------+
1 row in set

如果要详细看到警告,请使用SHOW WARNINGS语句:

mysql> SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2017-02-30' |
+---------+------+----------------------------------------+
1 row in set

调整日,月或年

如果您将MONTHYEARYEAR_MONTH的间隔添加到导致日期大于新月份的最大日期的日期,则该日期将被调整为新月份的最大日期。

请看看以下示例:

mysql> SELECT DATE_ADD('2017-01-30', INTERVAL 1 MONTH) result;
+------------+
| result     |
+------------+
| 2017-02-28 |
+------------+
1 row in set

在这个例子中,我们在2017年1月30日相加上了1个月,结果是2017年2月28日。这一天被调整到2017年2月的最大天数。

如果是2月份有29天,日期也将调整为第29天,如下所示:

mysql> SELECT DATE_ADD('2012-01-30', INTERVAL 1 MONTH) result;
+------------+
| result     |
+------------+
| 2012-02-29 |
+------------+
1 row in set

在本教程中,您已经学习了如何使用MySQL DATE_ADD函数将间隔添加到DATEDATETIME值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值