MySQL日期时间函数详解

ops/2025/1/23 3:10:59/

简介

本文主要讲解MySQL中的日期时间函数,包括:NOW、CURRENT_TIMESTAMP、CURDATE、CURRENT_DATE、CURTIME、CURRENT_TIME、STR_TO_DATE、DATE_FORMAT、TIME_FORMAT、DATE、TIME、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、QUARTER、YEARWEEK、WEEKDAY、DAYOFYEAR、WEEKOFYEAR、TO_DAYS、FROM_DAYS、TO_SECONDS、UNIX_TIMESTAMP、FROM_UNIXTIME、TIMEDIFF、TIMESTAMPDIFF、DATEDIFF、ADDDATE、DATE_ADD、ADDTIME、SUBDATE、DATE_SUB、SUBTIME

以下所有示例中,双横杠“--”左边为执行的SQL语句,右边为对应语句的返回值。

NOW函数

语法:NOW(),返回当前日期时间。

示例:

select NOW();-- 2025-01-20 20:18:30

CURRENT_TIMESTAMP函数

语法:CURRENT_TIMESTAMP(),返回当前时间戳,即当前日期时间。

示例:

select CURRENT_TIMESTAMP();-- 2025-01-20 21:17:45

CURDATE函数

语法:CURDATE()返回当前日期。

示例:

select CURDATE();-- 2025-01-20

CURRENT_DATE函数

语法:CURRENT_DATE(),返回当前日期。

示例:

select CURRENT_DATE();-- 2025-01-20

CURTIME函数

语法:CURTIME(),返回当前时间。

示例:

select CURTIME();-- 21:13:09

CURRENT_TIME函数

语法:CURRENT_TIME()返回当前时间。

示例:

select CURRENT_TIME();-- 21:16:33

STR_TO_DATE函数

语法:STR_TO_DATE(str,format),表示将字符串str转换为指定format格式的日期时间值。

示例如下:

select STR_TO_DATE('2025-01-20', '%Y-%m-%d %H:%i:%s');-- 2025-01-20 00:00:00
select STR_TO_DATE('2025-01-20', '%Y-%m-%d');-- 2025-01-20
select STR_TO_DATE('2025-01-20 12:18:18', '%Y-%m-%d');-- 2025-01-20
select STR_TO_DATE('2025-01-20', '%Y-%m');-- NULL
select STR_TO_DATE('2025-01-20', '%Y');-- NULL
select STR_TO_DATE('2025-01-20', '%m');-- NULL

DATE_FORMAT函数

语法:DATE_FORMAT(date,format),表示将日期时间值date转化为指定format格式的字符串。

示例如下:

select DATE_FORMAT('2025-01-20 12:18:18', '%Y-%m-%d %H:%i:%s');-- 2025-01-20 12:18:18
select DATE_FORMAT('2025-01-20', '%Y-%m-%d %H:%i:%s');-- 2025-01-20 00:00:00
select DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');-- 2025-01-20 20:48:01
select DATE_FORMAT(NOW(), '%Y-%m-%d');-- 2025-01-20
select DATE_FORMAT(NOW(), '%H:%i:%s');-- 20:48:48
select DATE_FORMAT(CURDATE(), '%Y-%m-%d %H:%i:%s');-- 2025-01-20 00:00:00
select DATE_FORMAT(CURTIME(), '%Y-%m-%d %H:%i:%s');-- 2025-01-20 20:49:05

TIME_FORMAT函数

语法:TIME_FORMAT(time,format),表示将时间值time转化为指定format格式的字符串。

示例:

select TIME_FORMAT('2025-01-20 12:18:18', '%Y-%m-%d %H:%i:%s');-- 0000-00-00 12:18:18
select TIME_FORMAT('2025-01-20 12:18:18', '%H:%i:%s');-- 12:18:18
select TIME_FORMAT('12:18:18', '%H:%i:%s');-- 12:18:18
select TIME_FORMAT(NOW(), '%H:%i:%s');-- 20:57:01
select TIME_FORMAT(CURDATE(), '%H:%i:%s');-- 00:00:00
select TIME_FORMAT(CURTIME(), '%H:%i:%s');-- 20:57:53

DATE函数

语法:DATE(expr),从日期时间expr中取日期部分。

示例:

select DATE('2025-01-20 12:18:18');-- 2025-01-20

select DATE('2025-01-20');-- 2025-01-20

TIME函数

语法:TIME(expr),从日期时间expr中取时间部分。

示例:

select TIME('2025-01-20 12:18:18');-- 12:18:18

select TIME('12:18:18');-- 12:18:18

YEAR函数

语法:YEAR(expr),从日期时间expr中取年份。

示例:

select YEAR('2025-01-20 12:18:18');-- 2025

select YEAR('2025-01-20');-- 2025

MONTH函数

语法:MONTH(expr),从日期时间expr中取月份。

示例:

select MONTH('2025-01-20 12:18:18');-- 1

select MONTH('2025-01-20');-- 1

DAY函数

语法:DAY(expr),从日期时间expr中取天数。

示例:

select DAY('2025-01-20 12:18:18');-- 20

select DAY('2025-01-20');-- 20

HOUR函数

语法:HOUR(expr),从日期时间expr中取小时。

示例:

select HOUR('2025-01-20 12:18:18');-- 12
select HOUR('12:18:18');-- 12

MINUTE函数

语法:MINUTE(expr),从日期时间expr中取分钟。

示例:

select MINUTE('2025-01-20 12:18:18');-- 18
select MINUTE('12:18:18');-- 18

SECOND函数

语法:SECOND(expr),从日期时间expr中取秒数。

示例:

select SECOND('2025-01-20 12:18:58');-- 58
select SECOND('12:18:58');-- 58

QUARTER函数

语法:QUARTER(expr),从日期时间expr中取季度。

示例:

select QUARTER('2025-01-20 12:18:58');-- 1
select QUARTER('2025-06-18');-- 2

YEARWEEK函数

语法:YEARWEEK(expr),从日期时间expr中取年份和周数,即哪一年第几周。

示例:

select YEARWEEK('2025-01-20 12:18:58');-- 202503
select YEARWEEK('2025-02-18');-- 202507

WEEKDAY函数

语法:WEEKDAY(expr),从日期时间expr中取周数,即第几周。

示例:

select WEEKDAY('2025-01-08 12:18:58');-- 2
select WEEKDAY('2025-01-20 12:18:58');-- 0
select WEEKDAY('2025-02-18');-- 1
select WEEKDAY('2025-02-20');-- 3

DAYOFYEAR函数

语法:DAYOFYEAR(date),返回日期时间date在其所属年份中是第几天。

示例:

SELECT DAYOFYEAR('2025-01-21 12:08:18');-- 21
SELECT DAYOFYEAR('2025-08-20');-- 232

WEEKOFYEAR函数

语法:WEEKOFYEAR(date),返回日期时间date在其所属年份中是第几周。

示例:

SELECT WEEKOFYEAR('2025-01-28 12:08:18');-- 5
SELECT WEEKOFYEAR('2025-08-15');-- 33

TO_DAYS函数

语法:TO_DAYS(date),将日期时间date转化为天数。

示例:

SELECT TO_DAYS('2025-08-18 12:08:18');-- 739846
SELECT TO_DAYS('2025-08-18');-- 739846
SELECT TO_DAYS(NOW());-- 739637

FROM_DAYS函数

语法:FROM_DAYS(N),将天数N转化为日期,返回格式为【%Y-%m-%d】。

示例:

SELECT FROM_DAYS(739846);-- 2025-08-18

TO_SECONDS函数

语法:TO_SECONDS(expr),将日期时间expr转化为秒数。

示例:

SELECT TO_SECONDS('2025-01-08');-- 63903513600
SELECT TO_SECONDS('2025-01-08 12:18:58');-- 63903557938
SELECT TO_SECONDS(NOW());-- 63904679500

UNIX_TIMESTAMP函数

语法:UNIX_TIMESTAMP(expr),返回日期时间expr对应的时间戳数值,若参数为空,则返回当前时间的时间戳数值。

示例:

select UNIX_TIMESTAMP('2025-01-20 12:18:58');-- 1737346738
select UNIX_TIMESTAMP('2025-02-18');-- 1739808000
select UNIX_TIMESTAMP();-- 1737380925

FROM_UNIXTIME函数

语法:FROM_UNIXTIME(expr),返回时间戳数值expr对应的日期时间,参数不能为空。

示例:

select FROM_UNIXTIME(1737346738);-- 2025-01-20 12:18:58
select FROM_UNIXTIME(1739808000);-- 2025-02-18 00:00:00

TIMEDIFF函数

语法:TIMEDIFF(expr1,expr2),返日期时间expr1和日期时间expr2之间的时间差,只计算两个时间中时分秒部分的差值,返回值格式为【%H:%i:%s】,若expr1大于expr2,则返回正值,若expr1小于expr2,则返回负值。

示例:

select TIMEDIFF('2025-01-08 12:18:58','2025-01-08 11:08:58');-- 01:10:00
select TIMEDIFF('2025-01-08 12:18:58','2025-01-08 13:18:58');-- 返回:-01:00:00
select TIMEDIFF('13:18:58','11:18:58');-- 02:00:00
select TIMEDIFF('2025-01-08','2025-01-18');-- 00:00:00
select TIMEDIFF('12:18:58','12:08:58');-- 00:10:00
select TIMEDIFF('12:18:58','12:18:58');-- 00:00:00

TIMESTAMPDIFF函数

语法:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2),返日期时间datetime_expr1和日期时间datetime_expr2之间的时间差,unit表示时间差值的单位,可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND;若datetime_expr1小于datetime_expr2,则返回正值,若expr1大于expr2,则返回负值。

示例:

SELECT TIMESTAMPDIFF(DAY,'2025-01-21 12:08:18','2025-01-29 12:08:18');-- 8
SELECT TIMESTAMPDIFF(DAY,'2025-01-29 12:08:18','2025-01-21 12:08:18');-- 返回:-8
SELECT TIMESTAMPDIFF(DAY,'2025-01-21 12:08:18','2025-02-25 12:08:18');-- 35
SELECT TIMESTAMPDIFF(DAY,'2025-01-21','2026-02-25');-- 400
SELECT TIMESTAMPDIFF(DAY,NOW(),'2024-12-28');-- -24
SELECT TIMESTAMPDIFF(MONTH,'2025-01-21','2026-02-25');-- 13
SELECT TIMESTAMPDIFF(YEAR,'2025-01-21','2026-02-25');-- 1
SELECT TIMESTAMPDIFF(HOUR,'2025-01-21 12:08:18','2025-02-25 12:08:18');-- 840
SELECT TIMESTAMPDIFF(MINUTE,'2025-01-21 12:08:18','2025-02-25 12:08:18');-- 50400
SELECT TIMESTAMPDIFF(SECOND,'2025-01-21 12:08:18','2025-02-25 12:08:18');-- 3024000

DATEDIFF函数

语法:DATEDIFF(expr1,expr2),返日期时间expr1和日期时间expr2之间的天数差,只计算两个时间中年月日部分的差值,若expr1大于expr2,则返回正值,若expr1小于expr2,则返回负值。

示例:

select DATEDIFF('2025-01-08 12:18:58','2025-01-08 11:08:58');-- 0
select DATEDIFF('2025-01-08','2025-01-18');-- 返回:-10
select DATEDIFF('2025-01-18','2025-01-08');-- 10
select DATEDIFF('2025-01-08','2025-01-08');-- 0
select DATEDIFF('13:18:58','11:18:58');-- NULL

ADDDATE函数

语法:

第一种:ADDDATE(date,INTERVAL expr unit),返回日期时间date加上一段时间expr后的日期时间,unit是expr的单位,可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。

第二种:ADDDATE(expr,days),返回日期时间expr加上指定天数days后的日期时间。

示例:

SELECT ADDDATE('2025-01-21', INTERVAL 8 DAY);-- 2025-01-29
SELECT ADDDATE('2025-01-21', INTERVAL 2 MONTH);-- 2025-03-21
SELECT ADDDATE('2025-01-21', INTERVAL 1 YEAR);-- 2026-01-21
SELECT ADDDATE('2025-01-21', 8);-- 2025-01-29
SELECT ADDDATE('2025-01-21 12:08:18', INTERVAL 8 DAY);-- 2025-01-29 12:08:18
SELECT ADDDATE('2025-01-21 12:08:18', INTERVAL 8 HOUR);-- 2025-01-21 20:08:18
SELECT ADDDATE('2025-01-21 12:08:18', INTERVAL 8 MINUTE);-- 2025-01-21 12:16:18
SELECT ADDDATE('2025-01-21 12:08:18', INTERVAL 8 SECOND);-- 2025-01-21 12:08:26
SELECT ADDDATE(NOW(), INTERVAL 8 DAY);-- 2025-01-29 10:42:36
SELECT ADDDATE(CURDATE(), INTERVAL 8 DAY);-- 2025-01-29

DATE_ADD函数

语法:DATE_ADD(date,INTERVAL expr unit),返回日期时间date加上一段时间expr后的日期时间,unit是expr的单位,可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND,效果与ADDDATE函数相同,但是不支持DATE_ADD(expr,days)用法。

示例:

SELECT DATE_ADD('2025-01-21', INTERVAL 8 DAY);-- 2025-01-29
SELECT DATE_ADD('2025-01-21', INTERVAL 2 MONTH);-- 2025-03-21
SELECT DATE_ADD('2025-01-21', INTERVAL 1 YEAR);-- 2026-01-21
SELECT DATE_ADD('2025-01-21 12:08:18', INTERVAL 8 DAY);-- 2025-01-29 12:08:18
SELECT DATE_ADD('2025-01-21 12:08:18', INTERVAL 8 HOUR);-- 2025-01-21 20:08:18
SELECT DATE_ADD('2025-01-21 12:08:18', INTERVAL 8 MINUTE);-- 2025-01-21 12:16:18
SELECT DATE_ADD('2025-01-21 12:08:18', INTERVAL 8 SECOND);-- 2025-01-21 12:08:26
SELECT DATE_ADD(NOW(), INTERVAL 8 DAY);-- 2025-01-29 10:49:49
SELECT DATE_ADD(CURDATE(), INTERVAL 8 DAY);-- 2025-01-29
SELECT DATE_ADD('2025-01-21', 8);-- 报错:[Err] 1064

ADDTIME函数

语法:ADDTIME(expr1,expr2),返回日期时间expr1加上一段时间expr2后的日期时间,expr2可以是一个纯数值,也可以是时分秒的格式。

示例:

SELECT ADDTIME('2025-01-21 12:08:18',8);-- 2025-01-21 12:08:26
SELECT ADDTIME('2025-01-21 12:08:18',8.88);-- 2025-01-21 12:08:26.880000
SELECT ADDTIME('2025-01-21 12:08:18','8');-- 2025-01-21 12:08:26
SELECT ADDTIME('2025-01-21 12:08:18','8.88');-- 2025-01-21 12:08:26.880000
SELECT ADDTIME('2025-01-21 12:08:18','12:00:00');-- 2025-01-22 00:08:18
SELECT ADDTIME('2025-01-21 12:08:18','12:00:00.88');-- 2025-01-22 00:08:18.880000
SELECT ADDTIME('2025-01-21 12:08:18','2025-01-21 12:00:00');-- NULL

SUBDATE函数

语法:

第一种:SUBDATE(date,INTERVAL expr unit),返回日期时间date减去一段时间expr后的日期时间,unit是expr的单位,可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。

第二种:SUBDATE(expr,days),返回日期时间expr减去指定天数days后的日期时间。

示例:

SELECT SUBDATE('2025-01-21', INTERVAL 8 DAY);-- 2025-01-13
SELECT SUBDATE('2025-01-21', INTERVAL 2 MONTH);-- 2024-11-21
SELECT SUBDATE('2025-01-21', INTERVAL 1 YEAR);-- 2024-01-21
SELECT SUBDATE('2025-01-21', 8);-- 2025-01-13
SELECT SUBDATE('2025-01-21 12:08:18', INTERVAL 8 DAY);-- 2025-01-13 12:08:18
SELECT SUBDATE('2025-01-21 12:08:18', INTERVAL 8 HOUR);-- 2025-01-21 04:08:18
SELECT SUBDATE('2025-01-21 12:08:18', INTERVAL 8 MINUTE);-- 2025-01-21 12:00:18
SELECT SUBDATE('2025-01-21 12:08:18', INTERVAL 8 SECOND);-- 2025-01-21 12:08:10
SELECT SUBDATE(NOW(), INTERVAL 8 DAY);-- 2025-01-13 11:09:06
SELECT SUBDATE(CURDATE(), INTERVAL 8 DAY);-- 2025-01-13

DATE_SUB函数

语法:DATE_SUB(date,INTERVAL expr unit),返回日期时间date减去一段时间expr后的日期时间,unit是expr的单位,可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND,效果与SUBDATE函数相同,但是不支持DATE_SUB(expr,days)用法。

示例:

SELECT DATE_SUB('2025-01-21', INTERVAL 8 DAY);-- 2025-01-13
SELECT DATE_SUB('2025-01-21', INTERVAL 2 MONTH);-- 2024-11-21
SELECT DATE_SUB('2025-01-21', INTERVAL 1 YEAR);-- 2024-01-21
SELECT DATE_SUB('2025-01-21 12:08:18', INTERVAL 8 DAY);-- 2025-01-13 12:08:18
SELECT DATE_SUB('2025-01-21 12:08:18', INTERVAL 8 HOUR);-- 2025-01-21 04:08:18
SELECT DATE_SUB('2025-01-21 12:08:18', INTERVAL 8 MINUTE);-- 2025-01-21 12:00:18
SELECT DATE_SUB('2025-01-21 12:08:18', INTERVAL 8 SECOND);-- 2025-01-21 12:08:10
SELECT DATE_SUB(NOW(), INTERVAL 8 DAY);-- 2025-01-13 11:14:27
SELECT DATE_SUB(CURDATE(), INTERVAL 8 DAY);-- 2025-01-13
SELECT DATE_SUB('2025-01-21', 8);-- 报错:[Err] 1064

SUBTIME函数

语法:SUBTIME(expr1,expr2),返回日期时间expr1减去一段时间expr2后的日期时间,expr2可以是一个纯数值,也可以是时分秒的格式。

示例:

SELECT SUBTIME('2025-01-21 12:08:18',8);-- 2025-01-21 12:08:10
SELECT SUBTIME('2025-01-21 12:08:18',8.88);-- 2025-01-21 12:08:09.120000
SELECT SUBTIME('2025-01-21 12:08:18','8');-- 2025-01-21 12:08:10
SELECT SUBTIME('2025-01-21 12:08:18','8.88');-- 2025-01-21 12:08:09.120000
SELECT SUBTIME('2025-01-21 12:08:18','12:00:00');-- 2025-01-21 00:08:18
SELECT SUBTIME('2025-01-21 12:08:18','12:00:00.88');-- 2025-01-21 00:08:17.120000
SELECT SUBTIME('2025-01-21 12:08:18','2025-01-21 12:00:00');-- NULL


http://www.ppmy.cn/ops/152355.html

相关文章

Nginx 反向代理与负载均衡配置实践

一、引言 在当今互联网架构中,Nginx作为一款高性能的HTTP和反向代理服务器,广泛应用于各种场景,为众多网站和应用提供了强大的支持。它能够高效地处理大量并发请求,实现反向代理与负载均衡功能,显著提升系统的性能、可…

C#语言的学习路线

C#语言的学习路线 C#作为一种现代编程语言,凭借其简洁的语法、强大的功能和广泛的应用,得到了越来越多开发者的青睐。无论是开发桌面应用、Web应用、游戏,还是云服务,C#都有着广泛的应用场景。本文将为有志于学习C#的读者提供一条…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…

【Linux】Linux命令:free

目录 1、作用2、命令使用格式3、常用参数说明4、输出结果说明4.1 行字段说明4.2 列字段说明 5、示例5.1 以人类易读的方式显示内存使用情况5.2 显示内存总和行5.3 以2秒为间隔,持续输出内存使用情况5.4 以2秒为间隔,输出5次内存使用情况 1、作用 free命令…

【Red Hat8】:搭建FTP服务器

目录 一、匿名FTP访问 1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 5、安装VSFTPD 6、 打开配置文件 7、设置配置文件如下几个参数 8、重启vsftpd服务 9、进入图形化界面配置网络 10、查看IP地址 11、安装ftp服务 12、遇到拒绝连接 13、测试 二、本地…

QT:QTabWidget设置tabPosition为West时,文字向上

解决办法1(无效) tabWidget->setStyleSheet("QTabBar::tab { min-width: 100px; } QTabBar::tab:down { spacing: 2px; } QTabBar::tab:down { transform: rotate(270deg); }"); 解决办法2(无效) 写QTabBar。 pa…

典型的 flask的 用户模型,使用 flask shell 添加数据

您提供的 AdminModel 是一个使用 SQLAlchemy 定义的 Flask 模型,用于管理管理员用户的数据。以下是对该模型的详细分析以及如何通过 Flask 的 shell 界面添加数据的步骤。 1. 模型分析 1.1 表结构 表名: admin(在 SCHEMA 模式下的 admin 表…

大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTask、Shuffle工作原理)

MapReduce概述 MapReduce是Hadoop的核心项目之一,它是一个分布式计算框架, 可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是大数据中较为熟知的分布式计算框架。 MapReduce作为分布式计算框架&#xff0…