当前位置: 首页 > article >正文

MySQL日期时间函数详解

简介

本文主要讲解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.kler.cn/a/514419.html

相关文章:

  • 【Linux】环境变量
  • nuxt3项目打包部署到服务器后配置端口号和开启https
  • flutter跨端UI框架简介
  • 工业相机 SDK 二次开发-Halcon 插件
  • 【Prometheus】PromQL进阶用法
  • BEVFusion论文阅读
  • 2.Spring-AOP
  • 探索 Stable-Diffusion-Webui-Forge:更快的AI图像生成体验
  • Halcon入门学习(机器视觉)
  • 机遇、挑战与融合创新之路
  • MySql字段的值是以逗号隔开的另一个表的主键关联查询
  • Oracle SQL: TRANSLATE 和 REGEXP_LIKE 的知识点详细分析
  • Spring Security 7 来啦
  • HTB:Remote[WriteUP]
  • AR智慧点巡检系统探究和技术方案设计
  • 微软 Win11 RP 22631.4825(KB5050092)预览版发布!
  • 哈夫曼树(构建、编码、译码)(详细分析+C++代码实现)
  • 纯前端实现表格中的数据导出功能-使用xlsx和file-saver
  • 【大数据】机器学习----------计算机学习理论
  • OpenHarmony OTA升级参考资料记录
  • 路由重分布
  • Hack The Box-Starting Point系列Vaccine
  • 【机器学习实战中阶】使用SARIMAX,ARIMA预测比特币价格,时间序列预测
  • LINUX下设置分离状态(Detached State)和未设置分离状态的主要区别在于线程资源的管理方式和线程的生命周期。以下是两种状态的对比:
  • 1.21学习
  • Ceisum无人机巡检直播视频投射