MySQL日期时间函数 ADDDATE() 用法
csdh11 2024-12-17 12:11 45 浏览
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)
相关推荐
- OKHttp原理解析(okhttp的作用)
-
Okhttp应该是Android目前非常流行的第三方网络库,尝试讲解他的使用以及原理分析,分成几个部分:...
- 快速教会你优雅的解决TCP客户端端口耗尽的问题
-
Hello,我是Henry,相信各位开发老爷在使用大并发网络连接的时候,可能都遇到过TCP客户端端口耗尽的问题,这是一个常见问题,以下是系统性的解决方案及技术细节:1.理解端口限制的本质...
- 这3个接口基础知识,产品经理需要知道
-
产品经理在工作中,避免不了要阅读接口文档,希望本文能够帮助大家更好的了解接口。接口,即客户端(浏览器)向服务器提交请求,服务器向客户端返回响应。本质就是数据的传输与接收。本文主要介绍接口相关的基础知识...
- Java 11新特性对开发者的影响:让编程更高效、更自由
-
Java11新特性对开发者的影响:让编程更高效、更自由在这个瞬息万变的编程世界里,每一代Java的更新都承载着无数开发者对性能优化、生产力提升以及代码美感追求的期望。作为继Java8之后的首个长期...
- 干货-okHttp的优点-收藏了(okhttp的好处)
-
OkHttp相较于其它的实现有以下的优点.支持SPDY,允许连接同一主机的所有请求分享一个socket。如果SPDY不可用,会使用连接池减少请求延迟。使用GZIP压缩下载内容,且压缩操作对用...
- 如何在 Java 项目中集成 DeepSeek
-
一、使用官方SDK基础集成1.添加依赖(Maven)<dependency><groupId>com.deepseek</groupId>...
- spring cloud gateway 性能优化思路
-
SpringCloudGateway是一个高性能的API网关,但在实际的生产环境中,可能会遇到一些性能瓶颈。以下是一些SpringCloudGateway的性能优化方面:调整线程池...
- 你对Android中的okHttp的使用真的了解吗
-
框架下载地址:https://github.com/square/okhttp今天给大家讲解下网络框架okhttp的使用,这个框架非常强大,很多框架都用它来加载网络资源,目前很多开发者还在用As...
- 京东大佬问我,Nginx并发连接如何设置?详细说明
-
京东大佬问我,Nginx并发连接如何设置?详细说明首先,我需要回忆一下Nginx的并发模型。Nginx是基于事件驱动的异步架构,所以它的并发处理能力和配置参数有很大关系。主要的参数应该包括worker...
- 如何实现一个连接池?一文带你深入浅出,彻底搞懂
-
-前言-【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。...
- Golang 网络编程(golang 系统编程)
-
TCP网络编程存在的问题:拆包:对发送端来说应用程序写入的数据远大于socket缓冲区大小,不能一次性将这些数据发送到server端就会出现拆包的情况。通过网络传输的数据包最大是1500字节,当TCP...
- Spring6|Spring Boot3有哪些HTTP客户端可以选择
-
个人博客:无奈何杨(wnhyang)个人语雀:wnhyang...
- 10. 常用标准库(标准库有哪些)
-
本章深入解析Go语言核心标准库的关键功能与生产级应用技巧,结合性能优化与安全实践,提供高效开发指南。10.1fmt/io/os10.1.1fmt高级格式化...
- Nginx之连接池(nginx 长连接 连接复用)
-
我们知道Nginx利用连接池来增加它对资源的利用率。下面我们一起来看看Nginx是如何使用连接池的。从上一节模块开始已经慢慢会接触一些Nginx的源码部分来。每个worker进程都有一个独立的ngx...
- 开发者必备的Android开发资源之OkHttp
-
小编在这里给各位Android开发者介绍的资源包括工具、库和网站等。有效地利用它们,将有助于减轻我们的工作量,提高我们的工作效率。为什么需要一个HTTP库Android系统提供了两种HTTP通信类,H...
- 一周热门
- 最近发表
- 标签列表
-
- mydisktest_v298 (34)
- document.appendchild (35)
- 头像打包下载 (61)
- acmecadconverter_8.52绿色版 (39)
- word文档批量处理大师破解版 (36)
- server2016安装密钥 (33)
- mysql 昨天的日期 (37)
- parsevideo (33)
- 个人网站源码 (37)
- centos7.4下载 (33)
- mysql 查询今天的数据 (34)
- intouch2014r2sp1永久授权 (36)
- 先锋影音源资2019 (35)
- jdk1.8.0_191下载 (33)
- axure9注册码 (33)
- pts/1 (33)
- spire.pdf 破解版 (35)
- shiro jwt (35)
- sklearn中文手册pdf (35)
- itextsharp使用手册 (33)
- 凯立德2012夏季版懒人包 (34)
- 冒险岛代码查询器 (34)
- 128*128png图片 (34)
- jdk1.8.0_131下载 (34)
- dos 删除目录下所有子目录及文件 (36)