MySQL-日期和时间函数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL-日期和时间函数

获取当前日期的函数


CURDATE() 、CURRENT_DATE()

例1:获取系统当前日期

1. mysql> select curdate();
2. +------------+
3. | curdate()  |
4. +------------+
5. | 2023-02-14 |
6. +------------+
7. 1 row in set (0.00 sec)

例2:获取系统当前日期

1. mysql> select current_date();
2. +----------------+
3. | current_date() |
4. +----------------+
5. | 2023-02-14     |
6. +----------------+
7. 1 row in set (0.00 sec)

获取当前时间的函数


CURTIME() 、CURRENT_TIME()

例:获取系统当前时间,两个函数作用相同

1. mysql> select curtime();
2. +-----------+
3. | curtime() |
4. +-----------+
5. | 16:15:16  |
6. +-----------+
7. 1 row in set (0.00 sec)
8. 
9. mysql> select current_time();
10. +----------------+
11. | current_time() |
12. +----------------+
13. | 16:15:23       |
14. +----------------+
15. 1 row in set (0.00 sec)

获取当前日期和时间的函数


CURRENT_TIMESTAMP() 、LOCALTIME() 、NOW() 、SYSDATE()

例:获取系统当前日期和时间,四个函数作用相同

1. mysql> select current_timestamp();
2. +---------------------+
3. | current_timestamp() |
4. +---------------------+
5. | 2023-02-14 16:16:23 |
6. +---------------------+
7. 1 row in set (0.00 sec)
8. 
9. mysql> select localtime();
10. +---------------------+
11. | localtime()         |
12. +---------------------+
13. | 2023-02-14 16:17:49 |
14. +---------------------+
15. 1 row in set (0.00 sec)
16. 
17. mysql> select now();
18. +---------------------+
19. | now()               |
20. +---------------------+
21. | 2023-02-14 16:17:53 |
22. +---------------------+
23. 1 row in set (0.00 sec)
24. 
25. mysql> select sysdate();
26. +---------------------+
27. | sysdate()           |
28. +---------------------+
29. | 2023-02-14 16:18:01 |
30. +---------------------+
31. 1 row in set (0.00 sec)

获取时间戳的函数


UNIX_TIMESTAMP()

例:获取系统当前时间戳

1. mysql> select unix_timestamp();
2. +------------------+
3. | unix_timestamp() |
4. +------------------+
5. |       1676362724 |
6. +------------------+
7. 1 row in set (0.00 sec)

转换时间戳的函数


FROM_UNIXTIME()

例:将时间戳转换为日期时间

1. mysql> select from_unixtime(1676362724);
2. +---------------------------+
3. | from_unixtime(1676362724) |
4. +---------------------------+
5. | 2023-02-14 16:18:44       |
6. +---------------------------+
7. 1 row in set (0.00 sec)

获取 UTC 日期的函数


UTC_DATE()

例:获取当前 UTC (世界标准时间) 日期

1. mysql> select utc_date();
2. +------------+
3. | utc_date() |
4. +------------+
5. | 2023-02-14 |
6. +------------+
7. 1 row in set (0.00 sec)

获取 UTC 时间的函数


UTC_TIME()

例:获取当前UTC(世界标准时间)时间

1. mysql> select utc_time();
2. +------------+
3. | utc_time() |
4. +------------+
5. | 08:22:05   |
6. +------------+
7. 1 row in set (0.00 sec)

获取月份的函数


MONTH(date) 、MONTHNAME(date)

例:返回date对应的月份,返回结果为2,表示为2月

1. mysql> select month('2023-02-14');
2. +---------------------+
3. | month('2023-02-14') |
4. +---------------------+
5. |                   2 |
6. +---------------------+
7. 1 row in set (0.00 sec)

例2:返回date对应月份,返回结果为february,英文表示2月

1. mysql> select monthname('2023-02-14');
2. +-------------------------+
3. | monthname('2023-02-14') |
4. +-------------------------+
5. | February                |
6. +-------------------------+
7. 1 row in set (0.00 sec)

获取星期的函数


DAYNAME(date) 、DAYOFWEEK(date) 、WEEKDAY(date) 、WEEK(date) 、WEEKOFYEAR(date)

例1:返回date对应的工作日英文名称

1. mysql> select dayname('2023-02-14');
2. +-----------------------+
3. | dayname('2023-02-14') |
4. +-----------------------+
5. | Tuesday               |
6. +-----------------------+
7. 1 row in set (0.00 sec)

例2:返回date对应一周的索引,1表示周日,2表示周一,...,7表示周六

1. mysql> select dayofweek('2023-02-14');
2. +-------------------------+
3. | dayofweek('2023-02-14') |
4. +-------------------------+
5. |                       3 |
6. +-------------------------+
7. 1 row in set (0.00 sec)

例3:返回date对应一周的索引,0表示周一,1表示周二,...,6表示周日

1. mysql> select weekday('2023-02-14');
2. +-----------------------+
3. | weekday('2023-02-14') |
4. +-----------------------+
5. |                     1 |
6. +-----------------------+
7. 1 row in set (0.00 sec)

例4:返回date是一年中的第几周,一年有52.1428571429周

1. mysql> select week('2023-02-14');
2. +--------------------+
3. | week('2023-02-14') |
4. +--------------------+
5. |                  7 |
6. +--------------------+
7. 1 row in set (0.02 sec)

例5:返回date是一个月中的第几天

1. mysql> select dayofmonth('2023-02-14');
2. +--------------------------+
3. | dayofmonth('2023-02-14') |
4. +--------------------------+
5. |                       14 |
6. +--------------------------+
7. 1 row in set (0.03 sec)

获取年份的函数


YEAR(date)

例:返回date对应的年份,如没有则返回null

1. mysql> select year('11-02-03'),year('90-09-39');
2. +------------------+------------------+
3. | year('11-02-03') | year('90-09-39') |
4. +------------------+------------------+
5. |             2011 |             NULL |
6. +------------------+------------------+
7. 1 row in set, 1 warning (0.00 sec)

获取季度的函数


QUARTER(date)

例:返回date对应的季度,一年四个季度

1. mysql> select quarter('11-02-03'),quarter('11-04-03');
2. +---------------------+---------------------+
3. | quarter('11-02-03') | quarter('11-04-03') |
4. +---------------------+---------------------+
5. |                   1 |                   2 |
6. +---------------------+---------------------+
7. 1 row in set (0.00 sec)

获取分钟的函数


MINUTE(time)

例:返回当前时间的分钟,”now()”为当前时间

1. mysql> select minute(now());
2. +---------------+
3. | minute(now()) |
4. +---------------+
5. |            48 |
6. +---------------+
7. 1 row in set (0.00 sec)

获取秒钟的函数


SECOND(time)

例:返回当前时间的秒数

1. mysql> select second(now());
2. +---------------+
3. | second(now()) |
4. +---------------+
5. |            24 |
6. +---------------+
7. 1 row in set (0.00 sec)

获取日期的指定值的函数


EXTRACT(type FROM date)

例:分别返回年、月、日,type为日期类型,date为时间

1. mysql> select extract(year from now());
2. +--------------------------+
3. | extract(year from now()) |
4. +--------------------------+
5. |                     2023 |
6. +--------------------------+
7. 1 row in set (0.00 sec)
8. 
9. mysql> select extract(month from now());
10. +---------------------------+
11. | extract(month from now()) |
12. +---------------------------+
13. |                         2 |
14. +---------------------------+
15. 1 row in set (0.00 sec)
16. 
17. mysql> select extract(day from now());
18. +-------------------------+
19. | extract(day from now()) |
20. +-------------------------+
21. |                      15 |
22. +-------------------------+
23. 1 row in set (0.00 sec)

时间和秒钟转换的函数

TIME_TO_SEC(time) 、SEC_TO_TIME(time)

例1:返回从零点到当前时间的秒数

1. mysql> select time_to_sec(now());
2. +--------------------+
3. | time_to_sec(now()) |
4. +--------------------+
5. |              42959 |
6. +--------------------+
7. 1 row in set (0.00 sec)

例2:把秒转换为时分秒

1. mysql> select sec_to_time(42959);
2. +--------------------+
3. | sec_to_time(42959) |
4. +--------------------+
5. | 11:55:59           |
6. +--------------------+
7. 1 row in set (0.00 sec)

计算日期和时间的函数


DATE_ADD() 、ADDDATE() 、DATE_SUB() 、SUBDATE() 、ADDTIME() 、SUBTIME() 、DATEDIFF()

例1:DATE_ADD() 用于对日期进行加法运算,对指定的时间增加1分1秒

1. mysql> select date_add('2022-12-31 23:59:59',interval '1:1' minute_second);
2. +--------------------------------------------------------------+
3. | date_add('2022-12-31 23:59:59',interval '1:1' minute_second) |
4. +--------------------------------------------------------------+
5. | 2023-01-01 00:01:00                                          |
6. +--------------------------------------------------------------+
7. 1 row in set (0.00 sec)

例2:ADDDATE()同上,用于对日期的加法运算

1. mysql> select adddate('2022-12-31 23:59:59',interval '1:1' minute_second);
2. +-------------------------------------------------------------+
3. | adddate('2022-12-31 23:59:59',interval '1:1' minute_second) |
4. +-------------------------------------------------------------+
5. | 2023-01-01 00:01:00                                         |
6. +-------------------------------------------------------------+
7. 1 row in set (0.01 sec)

ADDDATE()也可以通过下面语法添加天数,格式如下

1. mysql> select adddate('2023-01-01',10);
2. +--------------------------+
3. | adddate('2023-01-01',10) |
4. +--------------------------+
5. | 2023-01-11               |
6. +--------------------------+
7. 1 row in set (0.00 sec)

例3:DATE_SUB()用于对日期的减法运算,如下:2月1日减去31天

1. mysql> select date_sub('2023-02-01',interval 31 day);
2. +----------------------------------------+
3. | date_sub('2023-02-01',interval 31 day) |
4. +----------------------------------------+
5. | 2023-01-01                             |
6. +----------------------------------------+
7. 1 row in set (0.00 sec)

例4:SUBDATE()同上,对日期进行减法运算

1. mysql> select subdate('2023-02-01',interval 31 day);
2. +---------------------------------------+
3. | subdate('2023-02-01',interval 31 day) |
4. +---------------------------------------+
5. | 2023-01-01                            |
6. +---------------------------------------+
7. 1 row in set (0.00 sec)

SUBDATE()也可以通过下面语法减少天数,格式如下

1. mysql> select subdate('2023-02-01',31);
2. +--------------------------+
3. | subdate('2023-02-01',31) |
4. +--------------------------+
5. | 2023-01-01               |
6. +--------------------------+

例5:ADDTIME()对日期进行加法运算,给指定的日期增加1时1分1秒

1. mysql> select addtime('2023-12-30 23:59:59','1:1:1');
2. +----------------------------------------+
3. | addtime('2023-12-30 23:59:59','1:1:1') |
4. +----------------------------------------+
5. | 2023-12-31 01:01:00                    |
6. +----------------------------------------+
7. 1 row in set (0.00 sec)

例6:SUBTIME() 对日期进行减法运算,给指定的日期减去1时1分1秒

1. mysql> select subtime('2023-12-30 23:59:59','1:1:1');
2. +----------------------------------------+
3. | subtime('2023-12-30 23:59:59','1:1:1') |
4. +----------------------------------------+
5. | 2023-12-30 22:58:58                    |
6. +----------------------------------------+
7. 1 row in set (0.00 sec)

例7:DATEDIFF() 用于计算两个日期之间的间隔天数

1. mysql> select datediff('2023-01-31','2023-01-1');
2. +------------------------------------+
3. | datediff('2023-01-31','2023-01-1') |
4. +------------------------------------+
5. |                                 30 |
6. +------------------------------------+
7. 1 row in set (0.00 sec)

将日期和时间格式化的函数


DATE_FORMAT(date, format) 、TIME_FORMAT(time, format) 、GET_FORMAT(val_type, format_type)

格式化类型在下面,根据需求修改

例1:DATE_FORMAT(date, format)用于格式化日期,根据format指定的格式显示date值

1. mysql> select date_format('2023-01-31 22:30:00','%W %M %Y');
2. +-----------------------------------------------+
3. | date_format('2023-01-31 22:30:00','%W %M %Y') |
4. +-----------------------------------------------+
5. | Tuesday January 2023                          |
6. +-----------------------------------------------+
7. 1 row in set (0.01 sec)

例2:TIME_FORMAT(time, format) 格式化时间,根据format指定的格式显示time值

1. mysql> select time_format('16:00:00','%H %k %I');
2. +------------------------------------+
3. | time_format('16:00:00','%H %k %I') |
4. +------------------------------------+
5. | 16 16 04                           |
6. +------------------------------------+
7. 1 row in set (0.00 sec)

例3:GET_FORMAT(val_type, format_type)指定值的类型和格式化类型,然后将其转换为字符串

1. mysql> select date_format('2023-01-20 22:30:00',get_format(date,'usa'));
2. +-----------------------------------------------------------+
3. | date_format('2023-01-20 22:30:00',get_format(date,'usa')) |
4. +-----------------------------------------------------------+
5. | 01.20.2023                                                |
6. +-----------------------------------------------------------+
7. 1 row in set (0.00 sec)

类型

说明

%d

该月日期,数字形式(00..31)

%e

该月日期,数字形式(0..31)

%f

微秒(000000...999999)

%H

以2位数表示24小时(00..23)

%h,%I

以2位数表示12小时(01..12)

%i

分钟,数字形式(00-59)

%j

一年中的天数(001-366)

%k

以24小时(0-23)

%l

以12小时(0..12)

%M

月份名称(january..December)

%m

月份数字形式(00..12)

%p

上午(AM)或下午(PM)

%r

时间,12小时制(小时hh:分钟mm:秒钟ss后面加AM或PM)

%S,%s

以2位数形式表示秒(00..59)

%T

时间,24小时制(小时hh:分钟mm:秒数ss)

%U

周(00..53),其中周日为每周的第一天 %u周(00..53),其中周一为每周的第一天

%V

周(01..53),其中周日为每周的第一天,和%X一起使用

%v

周(01..53),其中周一为每周的第一天,和%x一起使用

%W

工作日名称(周日..周六)

%w

一周中的每日(0=周日..6=周六)

%X

该周的年份,其中周日为每周的第一天;数字形式4位数,和%V同时使用

%x

该周的年份,其中周一为每周的第一天;数字形式4位数,和%v同时使用

%Y

4位数形式表示年份

%y

2位数形式表示年份

%%

“%”文字字符


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
关系型数据库 MySQL 数据挖掘
轻松入门MySQL:利用MySQL时间函数优化产品销售数据统计与分析(9)
轻松入门MySQL:利用MySQL时间函数优化产品销售数据统计与分析(9)
183 0
|
7月前
|
关系型数据库 MySQL 数据挖掘
MYSQL日期与时间函数的实用技巧
MYSQL日期函数与时间函数是数据库操作的关键工具,可轻松处理、查询、比较和格式化日期时间数据。它们能提取日期的年、月、日等部分,便于筛选和统计;同时,也能处理时间数据,如计算时间差、获取当前时间,助力用户更好地管理时间信息。掌握这些函数,不仅能提升数据库操作效率,还能为数据分析和报表生成提供有力支持。无论初学者还是资深数据库管理员,精通MYSQL的日期和时间函数都至关重要,以满足各种数据处理需求,确保数据的准确性和高效性。
367 0
|
1月前
|
关系型数据库 MySQL
Mysql 中日期比较大小的方法有哪些?
在 MySQL 中,可以通过多种方法比较日期的大小,包括使用比较运算符、NOW() 函数、DATEDIFF 函数和 DATE 函数。这些方法可以帮助你筛选出特定日期范围内的记录,确保日期格式一致以避免错误。
|
2月前
|
存储 自然语言处理 关系型数据库
mysql 8.0 日期维度表生成(可运行)
mysql 8.0 日期维度表生成(可运行)
56 2
|
1月前
|
SQL NoSQL 关系型数据库
|
2月前
|
关系型数据库 MySQL 数据处理
企业级应用 mysql 日期函数变量,干货已整理
本文详细介绍了如何在MySQL8.0中使用DATE_FORMAT函数进行日期格式的转换,包括当日、昨日及不同时间段的数据获取,并提供了实际的ETL应用场景和注意事项,有助于提升数据处理的灵活性和一致性。
43 0
|
7月前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
6月前
|
关系型数据库 MySQL 数据库
mysql之日期时间函数
SELECT SECOND('12:45:31'); -- 结果: 31 请注意,以上结果取决于实际查询执行的时间和日期。在实际的数据库操作中,通常会使用列名作为参数,而不是直接使用硬编码的日期或时间值。例如: SELECT YEAR(birthdate) FROM employees; 这将返回 employees 表中每位员工的 birthdate 列的年份。日期和时间函数在处理数据时非常有用,特别是当你需要对日期和时间进行操作或计算时。 ————————————————
46 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL 日期表制作
MySQL 日期表制作
69 0
|
7月前
|
存储 关系型数据库 MySQL
MySQL 格式化日期函数 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 之间区别
MySQL 格式化日期函数 DATE_FORMAT(), FROM_UNIXTIME() 和 UNIX_TIMESTAMP() 之间区别
215 1