百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

MySQL日期时间函数 ADDDATE() 用法

csdh11 2024-12-17 12:11 5 浏览

MySQL 中的 DATE、DATETIME 和 TIMESTAMP 数据类型分别用于存储日期、日期和时间、时间戳值。时间戳是一个数值,记录了'1970年1月1日零时'到当前时间的毫秒数。

MYSQL ADDDATE()函数用于将指定的时间间隔添加到日期值,例如2021-12-05,加5天,ADDDATE函数就会返回2021-12-10。

语法

ADDDATE(date, INTERVAL expr unit);

参数说明

date是表示日期的值,它可以是 String、DATE(YEAR、MONTH 和 DAY)、DATETIME(HOURS、MINUTES 或 SECONDS)或 TIMESTAMP 类型。

expr是表示区间值的值。

unit是 expr 值表示的区间类型,可以是 DAY、WEEK、MONTH、QUARTER、YEAR、HOUR、MINUTE、SECOND、MICROSECOND。

还有一种写法是

ADDDATE(expr, days);

参数说明

expr - 是表示日期的表达式。

days - 是表示要添加到给定日期的天数的间隔。

示例

mysql> SELECT ADDDATE('2021-12-05', INTERVAL 10 DAY);
+-----------------------------------------+
|  ADDDATE('2021-12-05', INTERVAL 10 DAY) |
+-----------------------------------------+
|                              2021-12-15 |
+-----------------------------------------+
1 row in set (0.00 sec)

上面的示例用于给日期2021-12-05加上10天。

mysql> SELECT ADDDATE('2021-01-02', INTERVAL 4 YEAR);
+-----------------------------------------+
|  ADDDATE('2021-01-02', INTERVAL 4 YEAR) |
+-----------------------------------------+
|                              2025-01-02 |
+-----------------------------------------+
1 row in set (0.00 sec)

上面的示例给日期2021-01-02加上4年。

mysql> SELECT ADDDATE('2021-11-23 10:40:32', '13 6:4:1');
+---------------------------------------------------------+
| ADDDATE('2021-11-23 10:40:32.88558', '13 6:4:1') |
+---------------------------------------------------------+
|                              2021-12-06 10:40:32 |
+---------------------------------------------------------+
1 row in set, 1 warning (0.01 sec)

上面的示例给日期加上了13天又6小时4分1秒。

另一种语法的示例

以下示例演示了此函数的第二种语法,其中我们将要添加的天数作为间隔传递

mysql> SELECT ADDDATE('1995-11-15', 554);
+----------------------------+
| ADDDATE('1995-11-15', 554) |
+----------------------------+
|                 1997-05-22 |
+----------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('1995-11-15', 54);
+---------------------------+
| ADDDATE('1995-11-15', 54) |
+---------------------------+
|                1996-01-08 |
+---------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('1995-11-15', 1154);
+-----------------------------+
| ADDDATE('1995-11-15', 1154) |
+-----------------------------+
|                  1999-01-12 |
+-----------------------------+
1 row in set (0.00 sec)

我们也可以将负值作为参数传递给这个函数

mysql> SELECT ADDDATE('2015-09-05', INTERVAL -20 DAY);
+-----------------------------------------+
| ADDDATE('2015-09-05', INTERVAL -20 DAY) |
+-----------------------------------------+
|                              2015-08-16 |
+-----------------------------------------+
1 row in set (0.10 sec)
mysql> SELECT ADDDATE('1995-11-15', -554);
+-----------------------------+
| ADDDATE('1995-11-15', -554) |
+-----------------------------+
|                  1994-05-10 |
+-----------------------------+
1 row in set (0.00 sec)

您还可以将列名作为参数传递给此函数。让我们使用 CREATE 语句在 MySQL 数据库中创建一个名为 MyPlayers 的表,如下所示 :

mysql> CREATE TABLE MyPlayers(
ID INT,
First_Name VARCHAR(255),
Last_Name VARCHAR(255),
Date_Of_Birth date,
Place_Of_Birth VARCHAR(255),
Country VARCHAR(255),
PRIMARY KEY (ID)
);

现在,我们将使用 INSERT 语句在 MyPlayers 表中插入 7 条记录 -

mysql> insert into MyPlayers values(1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India');
mysql> insert into MyPlayers values(2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica');
mysql> insert into MyPlayers values(3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka');
mysql> insert into MyPlayers values(4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India');
mysql> insert into MyPlayers values(5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India');
mysql> insert into MyPlayers values(6, 'Ravindra', 'Jadeja', DATE('1988-12-06'), 'Nagpur', 'India');
mysql> insert into MyPlayers values(7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England');

以下查询将 14 年添加到Date_Of_Birth列的实体-

mysql> SELECT First_Name, Last_Name, Date_Of_Birth, Country, ADDDATE(Date_Of_Birth, INTERVAL 14 YEAR) FROM MyPlayers;
+------------+------------+---------------+-------------+------------------------------------------+
| First_Name |  Last_Name | Date_Of_Birth |     Country | ADDDATE(Date_Of_Birth, INTERVAL 14 YEAR) |
+------------+------------+---------------+-------------+------------------------------------------+
|    Shikhar |     Dhawan |    1981-12-05 |       India |                               1995-12-05 |
|   Jonathan |      Trott |    1981-04-22 | SouthAfrica |                               1995-04-22 |
|     Kumara | Sangakkara |    1977-10-27 |    Srilanka |                               1991-10-27 |
|      Virat |      Kohli |    1988-11-05 |       India |                               2002-11-05 |
|      Rohit |     Sharma |    1987-04-30 |       India |                               2001-04-30 |
|   Ravindra |     Jadeja |    1988-12-06 |       India |                               2002-12-06 |
|      James |   Anderson |    1982-06-30 |     England |                               1996-06-30 |
+------------+------------+---------------+-------------+------------------------------------------+
7 rows in set (0.00 sec)

让我们使用 CREATE 语句在 MySQL 数据库中创建另一个名为 Sales 的表,如下所示:

mysql> CREATE TABLE sales(
ID INT,
ProductName VARCHAR(255),
CustomerName VARCHAR(255),
DispatchDate date,
DispatchTime time,
Price INT,
Location VARCHAR(255)
);
Query OK, 0 rows affected (2.22 sec)

现在,我们将使用 INSERT 语句在Sales表中插入 5 条记录:

insert into sales values (1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 'Hyderabad');
insert into sales values (2, 'Earphones', 'Roja', DATE('2019-05-01'), TIME('11:00:00'), 2000, 'Vishakhapatnam');
insert into sales values (3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 3000, 'Vijayawada');
insert into sales values (4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 'Chennai');
insert into sales values (5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 6000, 'Goa');

以下查询将 225 天添加到DispatchDate列的实体:

mysql> SELECT ProductName, CustomerName, DispatchDate, Price, ADDDATE(DispatchDate, 225) FROM sales;
+-------------+--------------+--------------+-------+----------------------------+
| ProductName | CustomerName | DispatchDate | Price | ADDDATE(DispatchDate, 225) |
+-------------+--------------+--------------+-------+----------------------------+
|   Key-Board |         Raja |   2019-09-01 |  7000 |                 2020-04-13 |
|   Earphones |         Roja |   2019-05-01 |  2000 |                 2019-12-12 |
|       Mouse |         Puja |   2019-03-01 |  3000 |                 2019-10-12 |
|      Mobile |       Vanaja |   2019-03-01 |  9000 |                 2019-10-12 |
|     Headset |       Jalaja |   2019-04-06 |  6000 |                 2019-11-17 |
+-------------+--------------+--------------+-------+----------------------------+
5 rows in set (0.00 sec)

假设我们使用以下查询创建了一个名为 dispatches_data 的表,其中有 5 条记录:

mysql> CREATE TABLE dispatches_data(
ProductName VARCHAR(255),
CustomerName VARCHAR(255),
DispatchTimeStamp timestamp,
Price INT,
Location VARCHAR(255)
);
insert into dispatches_data values('Key-Board', 'Raja', TIMESTAMP('2019-05-04', '15:02:45'), 7000, 'Hyderabad');
insert into dispatches_data values('Earphones', 'Roja', TIMESTAMP('2019-06-26', '14:13:12'), 2000, 'Vishakhapatnam');
insert into dispatches_data values('Mouse', 'Puja', TIMESTAMP('2019-12-07', '07:50:37'), 3000, 'Vijayawada');
insert into dispatches_data values('Mobile', 'Vanaja' , TIMESTAMP ('2018-03-21', '16:00:45'), 9000, 'Chennai');
insert into dispatches_data values('Headset', 'Jalaja' , TIMESTAMP('2018-12-30', '10:49:27'), 6000, 'Goa');

以下查询将 365 天添加到DispatchTimeStamp列的日期:

mysql> SELECT ProductName, CustomerName, DispatchTimeStamp, Price, ADDDATE(DispatchTimeStamp, 365) FROM dispatches_data;
+-------------+--------------+---------------------+-------+---------------------------------+
| ProductName | CustomerName |   DispatchTimeStamp | Price | ADDDATE(DispatchTimeStamp, 365) |
+-------------+--------------+---------------------+-------+---------------------------------+
|   Key-Board |         Raja | 2019-05-04 15:02:45 |  7000 |             2020-05-03 15:02:45 |
|   Earphones |         Roja | 2019-06-26 14:13:12 |  2000 |             2020-06-25 14:13:12 |
|       Mouse |         Puja | 2019-12-07 07:50:37 |  3000 |             2020-12-06 07:50:37 |
|      Mobile |       Vanaja | 2018-03-21 16:00:45 |  9000 |             2019-03-21 16:00:45 |
|     Headset |       Jalaja | 2018-12-30 10:49:27 |  6000 |             2019-12-30 10:49:27 |
+-------------+--------------+---------------------+-------+---------------------------------+
5 rows in set (0.00 sec)

以下示例演示了 ADDDATE() 函数中各种可用单位的用法:

mysql> SELECT ADDDATE('2021-03-22', INTERVAL '5-6 ' YEAR_MONTH );
+----------------------------------------------------+
| ADDDATE('2021-03-22', INTERVAL '5-6 ' YEAR_MONTH ) |
+----------------------------------------------------+
|                                         2026-09-22 |
+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('2021-03-22', INTERVAL '3' WEEK );
+-------------------------------------------+
| ADDDATE('2021-03-22', INTERVAL '3' WEEK ) |
+-------------------------------------------+
|                                2021-04-12 |
+-------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('2021-03-22', INTERVAL '3' QUARTER );
+----------------------------------------------+
| ADDDATE('2021-03-22', INTERVAL '3' QUARTER ) |
+----------------------------------------------+
|                                   2021-12-22 |
+----------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('2021-03-22', INTERVAL '10:09.2362191' MINUTE_MICROSECOND);
+--------------------------------------------------------------------+
| ADDDATE('2021-03-22', INTERVAL '10:09.2362191' MINUTE_MICROSECOND) |
+--------------------------------------------------------------------+
|                                         2021-03-22 00:10:11.362191 |
+--------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('2021-03-22', INTERVAL '10.2362191' SECOND_MICROSECOND);
+-----------------------------------------------------------------+
| ADDDATE('2021-03-22', INTERVAL '10.2362191' SECOND_MICROSECOND) |
+-----------------------------------------------------------------+
|                                      2021-03-22 00:00:12.362191 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('2021-03-22', INTERVAL '10.21' MINUTE_SECOND);
+-------------------------------------------------------+
| ADDDATE('2021-03-22', INTERVAL '10.21' MINUTE_SECOND) |
+-------------------------------------------------------+
|                                   2021-03-22 00:10:21 |
+-------------------------------------------------------+
1 row in set (0.00 sec)

相关推荐

Micheal Nielsen's神经网络学习之二

依然是跟着MichaelNielsen的神经网络学习,基于前一篇的学习,已经大概明白了神经网络的基本结构和BP算法,也能通过神经网络训练数字识别功能,之后我试验了一下使用神经网络训练之前的文本分类,...

CocoaPods + XCTest进行单元测试 c单元测试工具

在使用XCTest进行单元测试时,我们经常会遇到一些CocoaPods中的开源框架的调用,比如“Realm”或“Alamofire”在测试的时候,如果配置不当,会导致“frameworknotfo...

Java基础知识回顾第四篇 java基础讲解

1、&和&&的区别作为逻辑运算符:&(不管左边是什么,右边都参与运算),&&(如果左边为false,右边则不参与运算,短路)另外&可作为位运算符...

项目中的流程及类似业务的设计模式总结

说到业务流程,可能是我做过的项目中涉及业务最多的一个方面了。除了在流程设计之外,在一些考核系统、产业审批、还有很多地方,都用到相似的设计思路,在此一并总结一下。再说到模式,并不是因为流行才用这个词,而...

联想三款显示器首批获得 Eyesafe Certified 2.0 认证

IT之家7月31日消息,据外媒报道,三款全新联想显示器是全球首批满足EyesafeCertified2.0的设备。据报道,联想获得EyesafeCertified2.0认证的显...

maven的生命周期,插件介绍(二) 一个典型的maven构建生命周期

1.maven生命周期一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都...

多线程(3)-基于Object的线程等待与唤醒

概述在使用synchronized进行线程同步中介绍了依赖对象锁定线程,本篇文章介绍如何依赖对象协调线程。同synchronized悲观锁一样,线程本身不能等待与唤醒,也是需要对象才能完成等待与唤醒的...

jquery mobile + 百度地图 + phonegap 写的一个"校园助手"的app

1jquerymobile+百度地图+phonegap写的一个"校园助手"的app,使用的是基于Flat-UI的jQueryMobile,请参考:https://github.com/...

Apache 服务启动不了 apache系统服务启动不了

{我是新手,从未遇到此问题,请各位大大勿喷}事由:今天早上上班突然发现公司网站出现问题。经过排查,发现是Apache出现问题。首先检查配置文件没有出问题后,启动服务发现Apache服务能启动,但是没法...

健康债和技术债都不能欠 公众号: 我是攻城师(woshigcs)

在Solr4.4之后,Solr提供了SolrCloud分布式集群的模式,它带来的主要好处是:(1)大数据量下更高的性能(2)更好扩展性(3)更高的可靠性(4)更简单易用什么时候应该使用Sol...

Eye Experience怎么用?HTC告诉你 eyebeam怎么用

IT之家(www.ithome.com):EyeExperience怎么用?HTC告诉你HTC上周除了发布HTCDesireEYE自拍机和HTCRE管状运动相机之外,还发布了一系列新的智能手机...

Android系统应用隐藏和应用禁止卸载

1、应用隐藏与禁用Android设置中的应用管理器提供了一个功能,就是【应用停用】功能,这是针对某些系统应用的。当应用停用之后,应用的图标会被隐藏,但apk还是存在,不会删除,核心接口就是Packag...

计算机软件技术分享--赠人玫瑰,手遗余香

一、Netty介绍Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty...

Gecco爬虫框架的线程和队列模型 爬虫通用框架

简述爬虫在抓取一个页面后一般有两个任务,一个是解析页面内容,一个是将需要继续抓取的url放入队列继续抓取。因此,当爬取的网页很多的情况下,待抓取url的管理也是爬虫框架需要解决的问题。本文主要说的是g...

一点感悟(一) 初识 初读感知的意思

时间过得很快,在IT业已从业了两年多。人这一辈子到底需要什么,在路边看着人来人往,大部分人脸上都是很匆忙。上海真是一个魔都,它有魅力,有底蕴,但是一个外地人在这里扎根置业,真的是举全家之力,还贷3...