摘要:在本教程中,您将学习如何使用 MySQL DATE_ADD
函数将时间值添加到DATE
或DATETIME
值。
MySQL DATE_ADD
函数简介
DATE_ADD
函数向DATE
或DATETIME
值添加一个间隔。下面说明了DATE_ADD
函数的语法:
DATE_ADD(start_date, INTERVAL expr unit);
Code language: SQL (Structured Query Language) (sql)
DATE_ADD
函数有两个参数:
start_date
是起始DATE
或DATETIME
值INTERVAL expr unit
是要添加到起始日期值的间隔值。
DATE_ADD
函数可能返回DATETIME
值或字符串,具体取决于参数:
DATETIME
如果第一个参数是DATETIME
值或者间隔值具有时间元素(例如小时、分钟或秒等)。- 否则字符串。
MySQL DATE_ADD
函数示例
让我们看几个例子来了解DATE_ADD
函数的工作原理。
将 1 秒添加到1999-12-31 23:59:59
:
SELECT
DATE_ADD('1999-12-31 23:59:59',
INTERVAL 1 SECOND) result;
+---------------------+
| result |
+---------------------+
| 2000-01-01 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
将 1 天添加到1999-12-31 00:00:01
:
SELECT
DATE_ADD('1999-12-31 00:00:01',
INTERVAL 1 DAY) result;
+---------------------+
| result |
+---------------------+
| 2000-01-01 00:00:01 |
+---------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
将 1 分 1 秒添加到1999-12-31 23:59:59
。
SELECT
DATE_ADD('1999-12-31 23:59:59',
INTERVAL '1:1' MINUTE_SECOND) result;
+---------------------+
| result |
+---------------------+
| 2000-01-01 00:01:00 |
+---------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
将 -1 天和 5 小时添加到2000-01-01 00:00:00
。
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 (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
将 1 秒和 999999 微秒添加到1999-12-31 23:59:59.000002
:
SELECT
DATE_ADD('1999-12-31 23:59:59.000002',
INTERVAL '1.999999' SECOND_MICROSECOND) result;
+----------------------------+
| result |
+----------------------------+
| 2000-01-01 00:00:01.000001 |
+----------------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
MySQL DATE_ADD
函数使用笔记
间隔处理
区间内:
INTERVAL expr unit
Code language: SQL (Structured Query Language) (sql)
expr
被视为字符串,因此,在为expr
使用非字符串值时应小心。例如,对于HOUR_MINUTE
间隔, 5/2
计算结果为2.5000
(而不是2.5
),并被视为 2 小时 5000 分钟,如以下语句所示:
SELECT
DATE_ADD('2000-01-01',
INTERVAL 5 / 2 HOUR_MINUTE) result;
+---------------------+
| result |
+---------------------+
| 2000-01-04 13:20:00 |
+---------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
为了确保正确解释非字符串间隔值,您应该使用CAST
函数,如下所示:
SELECT
DATE_ADD('2000-01-01',
INTERVAL CAST(6/4 AS DECIMAL(3,1)) HOUR_MINUTE) result;
+---------------------+
| result |
+---------------------+
| 2000-01-01 01:05:00 |
+---------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
自动日期时间转换
如果将时间值添加到日期值,则结果是DATETIME
值,如以下示例所示:
SELECT
DATE_ADD('2000-01-01', INTERVAL 12 HOUR) result;
+---------------------+
| result |
+---------------------+
| 2000-01-01 12:00:00 |
+---------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
开始日期无效
如果您对第一个参数使用无效日期,则DATE_ADD
函数将返回NULL
,例如:
SELECT DATE_ADD('2000-02-30',
INTERVAL 1 DAY) result;
+--------+
| result |
+--------+
| NULL |
+--------+
1 row in set, 1 warning (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
如果您想详细查看警告,请使用SHOW WARNINGS
语句:
SHOW WARNINGS;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2000-02-30' |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
调整后的日、月或年
如果将MONTH
、 YEAR
或YEAR_MONTH
间隔添加到日期,导致日期中的某一天大于新月份的最大天数,则该天将调整为新月份的最大天数。
考虑以下示例:
SELECT
DATE_ADD('2010-01-30',
INTERVAL 1 MONTH) result;
+------------+
| result |
+------------+
| 2010-02-28 |
+------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
在此示例中,我们向January 30th 2010
添加 1 个月,结果是February 28th 2010
。 February 2010
调整为最大日数。
2月有29天的年份,日期也将调整为29日,如下所示:
SELECT
DATE_ADD('2012-01-30',
INTERVAL 1 MONTH) result;
+------------+
| result |
+------------+
| 2012-02-29 |
+------------+
1 row in set (0.00 sec)
Code language: SQL (Structured Query Language) (sql)
在本教程中,您学习了如何使用 MySQL DATE_ADD
函数向DATE
或DATETIME
值添加间隔。