MySQL DATE_ADD函数
简介:在本教程中,您将学习如何使用MySQL DATE_ADD函数将时间值添加到DATE或DATETIME值。
MySQL DATE_ADD函数简介
DATE_ADD函数将间隔添加到DATE或DATETIME值。
下面说明了DATE_ADD函数的语法:
DATE_ADD(start_date, INTERVAL expr unit);
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)
将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)
将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)
将-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)
向1999-12-31 23:59:59.000002增加1秒和999999微秒:
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)
MySQL DATE_ADD函数用法说明
间隔处理
在间隔中:
INTERVAL expr unit
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)
为确保正确解释非字符串间隔值,应使用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)
自动DATETIME转换
如果将时间值添加到日期值,则结果为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)
无效的开始日期
如果对第一个参数使用无效的日期,则DATE_ADD函数将返回NULL,例如:
SELECT DATE_ADD('2000-02-30', INTERVAL 1 DAY) result; +--------+ | result | +--------+ | NULL | +--------+ 1 row in set, 1 warning (0.00 sec)
如果要详细查看警告,请使用SHOW WARNINGS语句:
SHOW WARNINGS; +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2000-02-30' | +---------+------+----------------------------------------+ 1 row in set (0.00 sec)
调整后的日,月或年
如果您将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)
在此示例中,我们向2010年1月30日添加了1个月,结果是2010年2月28日。
该日期已调整为2010年2月的最大天数。
在2月有29天的一年中,日期也将调整为29日,如下所示:
SELECT DATE_ADD('2012-01-30', INTERVAL 1 MONTH) result; +------------+ | result | +------------+ | 2012-02-29 | +------------+ 1 row in set (0.00 sec)
在本教程中,您学习了如何使用MySQL DATE_ADD函数向DATE或DATETIME值添加间隔。