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

MySQL常用日期函数总结

获取当前日期时间

函数格式示例返回数据
NOW()YYYY-MM-dd HH:mm:ssSELECT NOW();2025-07-24 21:53:21
CURRENT_DATE()YYYY-MM-ddSELECT CURRENT_DATE();2025-07-24
CURRENT_TIME()HH:mm:ssSELECT CURRENT_TIME();21:57:06
CURRENT_TIMESTAMP()YYYY-MM-dd HH:mm:ssSELECT CURRENT_TIMESTAMP();2025-07-24 21:57:34
UTC_DATE()YYYY-MM-ddSELECT UTC_DATE();2025-07-24
UTC_TIME()HH:mm:ssSELECT UTC_TIME();14:00:45
UTC_TIMESTAMP()YYYY-MM-dd HH:mm:ssSELECT UTC_TIMESTAMP();2025-07-24 14:00:45

日期时间提取

函数说明示例结果
YEAR(date)提取年份SELECT YEAR(‘2025-07-24 08:00:00.1’);2025
MONTH(date)提取月份SELECT MONTH(‘2025-07-24 08:00:00.1’);7
DAY(date)提取日(1-31)SELECT DAY(‘2025-07-24 08:00:00.1’);24
HOUR(date)提取小时SELECT HOUR(‘2025-07-24 08:00:00.1’);8
MINUTE(date)提取分钟SELECT MINUTE(‘2025-07-24 08:00:00.1’);0
SECOND(date)提取秒SELECT SECOND(‘2025-07-24 08:00:00.1’);0
MICROSECOND(date)提取微秒SELECT MICROSECOND(‘2025-07-24 08:00:00.1’);100000
WEEK(date)提取年中的第几周(周日作为第一周开始计算,类似于%U)SELECT SECOND(‘2025-07-24 08:00:00.1’);29
DAYOFWEEK(date)提取周的第几天(1=周日,7=周六)SELECT DAYOFWEEK(‘2025-07-24 08:00:00.1’);5
DAYOFMONTH(date)提取月的第几天SELECT DAYOFMONTH(‘2025-07-24 08:00:00.1’);24
DAYOFYEAR(date)提取年的第几天SELECT DAYOFYEAR(‘2025-07-24 08:00:00.1’);205
QUARTER(date)提取季度SELECT QUARTER(‘2025-07-24 08:00:00.1’);3
DAYNAME(date)提取星期名称SELECT DAYNAME(‘2025-07-24 08:00:00.1’);Thursday
MONTHNAME(date)提取秒SELECT MONTHNAME(‘2025-07-24 08:00:00.1’);July

日期时间计算

日期加减

-- 2025-07-25 08:00:00.100000
SELECT DATE_ADD('2025-07-24 08:00:00.1', INTERVAL 1 DAY); -- 2025-07-23 08:00:00.100000
SELECT DATE_SUB('2025-07-24 08:00:00.1', INTERVAL 1 DAY); 

单位

单位说明示例
YEARSELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 YEAR);
QUARTER季度SELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 QUARTER);
MONTHSELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 MONTH);
WEEKSELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 WEEK);
DAYSELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 DAY);
HOUR小时SELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 HOUR);
MINUTESELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 MINUTE);
SECONDSELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 SECOND);
MICROSECOND微秒SELECT DATE_ADD(‘2025-07-24 08:00:00.1’, INTERVAL 1 MICROSECOND);

日期时间格式化

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS fmt1,       -- 2025-07-24DATE_FORMAT(NOW(), '%d/%m/%Y') AS fmt2,       -- 24/07/2025DATE_FORMAT(NOW(), '%W, %M %e, %Y') AS fmt3,  -- Thursday, July 24, 2025DATE_FORMAT(NOW(), '%H:%i:%s') AS fmt4,       -- 22:33:23DATE_FORMAT(NOW(), '%l:%i %p') AS fmt5;       -- 10:33 PM
符号说明示例
%Y4位年份2025
%y2位年份25
%m月份(00-12)07
%c月份(0-12)7
%M月份名称July
%b月份简写Jul
%d日(00-31)01
%e日(0-31)1
%D英文后缀的日1st
%H小时(00-23)01
%h小时(01-12)01
%l小时(01-12)01
%i分钟 (00-59)01
%s秒(00-59)01
%f微秒 (000000-999999)
%pAM/PMPM
%W星期名称Tuesday
%a星期缩写Tue
%w星期数字 (0=周日)4
%U周 (00-53) 周日开始29
%u周 (00-53) 周一开始30

日期时间转换

函数说明示例
STR_TO_DATE(str, format)字符串转日期SELECT STR_TO_DATE(‘24,07,2025’, ‘%d,%m,%Y’);
FROM_UNIXTIME(ts, format)Unix时间戳转日期SELECT FROM_UNIXTIME(1753286400, ‘%Y-%m-%d’);
UNIX_TIMESTAMP(date)转为Unix时间戳SELECT UNIX_TIMESTAMP(NOW()), UNIX_TIMESTAMP(‘2025-07-24’);

日期时间比较

函数说明示例
DATEDIFF(date1, date2)相差天数(date1-date2)SELECT DATEDIFF(‘2025-07-24’, ‘2025-07-26’); -2
TIMEDIFF(time1, time2)相差小时(time1-time2)SELECT TIMEDIFF(‘2025-07-24 00:00:00’, ‘2025-07-24 01:00:00’); -1
TIMESTAMPDIFF(unit, date1, date2)相差时间,单位unit,date2-date1SELECT TIMESTAMPDIFF(MINUTE, ‘2025-07-24 00:00:00’, ‘2025-07-24 01:00:00’); 60

特殊日期函数

函数说明示例
LAST_DAY(date)月份最后一天SELECT LAST_DAY(‘2025-07-24 00:00:00’); 2025-07-31
MAKEDATE(year, dayofyear)根据年+天数创建日期SELECT MAKEDATE(2025, 32); 2025-02-01
MAKETIME(hour,minute,second)创建时间SELECT MAKETIME(13, 1, 1); 13:01:01
PERIOD_ADD(period, months)增加月份SELECT PERIOD_ADD(202501,1); 202502
PERIOD_DIFF(period1, period2)相差月份SELECT PERIOD_DIFF(202501, 202502); -1
TO_DAYS(date)从0000-00-00计算天数SELECT TO_DAYS(‘0000-01-01’); 1
FROM_DAYS(days)将天数转为日期SELECT FROM_DAYS(366); 1

实用案例

计算年龄

SELECT birth_date,TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age
FROM users;

获取本周第一天

-- 获取本周第一天(周一为第一天)
SELECT DATE_ADD(CURDATE(), INTERVAL 2 - DAYOFWEEK(CURDATE()) DAY);

月末处理

-- 最后一天则是月末订单否则是普通订单
SELECT order_date,IF(order_date = LAST_DAY(order_date), '月末订单', '普通订单') AS order_type
FROM orders;

时间范围查询

-- 查询最近 1h 以内的日志数据
SELECT *
FROM logs
WHERE log_time BETWEEN DATE_SUB(NOW(), INTERVAL 1 HOUR) AND NOW();

今天起下个工作日计算(排除周末)

SELECT start_date,DATE_ADD(start_date, INTERVAL 5 DAY) AS end_date_naive,DATE_ADD(start_date,INTERVAL 5 + (2 * (WEEK(DATE_ADD(start_date, INTERVAL 5 DAY)) - WEEK(start_date))) DAY) AS end_date_adjusted
FROM projects;

提取JSON字段值

SELECT JSON_EXTRACT(json_column, '$.key_name') FROM table_name;
http://www.lryc.cn/news/599402.html

相关文章:

  • macbook安装homebrew
  • k8s常用基础命令总结
  • Dockerfile 文件及指令详解
  • Linux内核进程管理子系统有什么第八回 —— 进程主结构详解(4)
  • 代驾小程序系统开发:引领出行行业数字化转型
  • 在线笔试系统选型指南:牛客AI智能监考解决方案深度解析
  • Oracle不完全恢复实战指南:从原理到操作详解
  • RNN模型数学推导过程(笔记)
  • 基于Zigee的温度数据采集系统
  • IMU的精度对无人机姿态控制意味着什么?
  • 多层感知机(深度学习-李沐-学习笔记)
  • Oracle 的单体安装
  • SQLite中SQL的解析执行:Lemon与VDBE的作用解析
  • 扒网站工具 HTTrack Website Copier
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘streamlit’问题
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人(支持多模态上传)
  • GPU 服务器ecc报错处理
  • yolov8通道级剪枝讲解(超详细思考版)
  • linux修改用户名和主目录及权限-linux029
  • vue2用elementUI做单选下拉树
  • 激光频率梳 3D 轮廓检测在深凹槽检测的应用有哪些
  • AI-调查研究-38-多模态大模型量化 主流视觉语言任务的量化评估策略分析
  • 在kdb+x中使用SQL
  • Python高效操作Kafka实战指南
  • 专为小靶面工业相机的抗振微距镜头
  • C++ string:准 STL Container
  • Java线程基础面试复习笔记
  • 相机ROI 参数
  • 力扣-32.最长有效括号
  • Python(32)Python内置函数全解析:30个核心函数的语法、案例与最佳实践