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

Mysql时间函数

一、MySQL 时间格式化方法

1. DATE_FORMAT() 函数

作用:将日期/时间值格式化为字符串。
常用格式符

  • %Y:4位年份(如 2023)
  • %y:2位年份(如 23)
  • %m:两位月份(01~12)
  • %d:两位日期(01~31)
  • %H:24小时制小时(00~23)
  • %i:分钟(00~59)
  • %s:秒(00~59)
  • %W:星期名称(如 Monday)
  • %a:缩写星期(如 Mon)

示例

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_datetime,DATE_FORMAT('2023-10-05 14:30:00', '%W, %M %Y') AS readable_date;

输出

formatted_datetime      | readable_date
-----------------------|------------------
2023-10-05 14:30:00    | Thursday, October 2023

2. STR_TO_DATE() 函数

作用:将字符串转换为日期/时间类型。
示例

SELECT STR_TO_DATE('05-10-2023', '%d-%m-%Y') AS date_from_string;

输出

date_from_string
----------------
2023-10-05

3. UNIX_TIMESTAMP()FROM_UNIXTIME()
  • UNIX_TIMESTAMP():将日期转为 Unix 时间戳(秒级)。
  • FROM_UNIXTIME():将 Unix 时间戳转为日期。
SELECT UNIX_TIMESTAMP('2023-10-05 00:00:00') AS timestamp,FROM_UNIXTIME(1696464000) AS formatted_date;

输出

timestamp    | formatted_date
-------------|-------------------
1696464000   | 2023-10-05 00:00:00

二、MySQL 时间比较方法

1. 直接比较日期时间
-- 查询 2023 年 10 月之后的订单
SELECT * FROM orders 
WHERE order_time >= '2023-10-01 00:00:00';

2. DATEDIFF() 计算日期差

作用:返回两个日期相差的天数。

SELECT DATEDIFF('2023-10-10', '2023-10-05') AS day_diff;

输出

day_diff
--------
5

3. TIMESTAMPDIFF() 计算差值

作用:按单位(秒、分钟、小时、天等)计算时间差。
单位参数SECOND, MINUTE, HOUR, DAY, MONTH, YEAR

SELECT TIMESTAMPDIFF(HOUR, '2023-10-05 08:00:00', '2023-10-05 20:30:00') AS hour_diff,TIMESTAMPDIFF(MONTH, '2023-01-01', '2023-10-01') AS month_diff;

输出

hour_diff | month_diff
----------|-----------
12        | 9

4. DATE_ADD()DATE_SUB()

作用:对日期进行加减操作。

-- 查询 7 天前的日期
SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY) AS last_week;-- 查询 3 小时后的时间
SELECT DATE_ADD(NOW(), INTERVAL 3 HOUR) AS future_time;

5. 使用 BETWEEN 筛选时间范围
-- 查询 2023 年 10 月的订单
SELECT * FROM orders 
WHERE order_time BETWEEN '2023-10-01' AND '2023-10-31 23:59:59';

三、综合应用案例

案例1:统计最近7天每天的订单量
SELECT DATE_FORMAT(order_time, '%Y-%m-%d') AS order_date,COUNT(*) AS order_count
FROM orders
WHERE order_time >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
GROUP BY order_date
ORDER BY order_date;

案例2:计算用户注册后的活跃天数
SELECT user_id,DATEDIFF(MAX(last_login), MIN(register_time)) AS active_days
FROM user_activity
GROUP BY user_id;

四、注意事项

  1. 时区问题:确保数据库时区与业务逻辑一致,可用 SET time_zone = '+8:00'; 调整。
  2. 索引优化:避免对字段使用函数(如 WHERE DATE(order_time) = ...),可能导致索引失效。
  3. 精度处理:时间比较时注意微秒精度(DATETIME(6))的影响。

通过上述方法,可高效处理 MySQL 中的时间格式化和比较需求。

http://www.xdnf.cn/news/9665.html

相关文章:

  • MODIS数据下载及处理
  • 电商平台 API、数据抓取与爬虫技术的区别及优势分析
  • linux目录
  • CTFSHOW-WEB-36D杯
  • Unity数字人开发笔记——人物模型
  • 【Redis】热点key问题,的原因和处理,一致性哈希,删除大key的方法
  • 【C语言】深入理解C语言中的自定义数据类型:struct、union与enum
  • 大话软工笔记—基本概念
  • 三视图重建 笔记
  • python入门day02
  • 制导与导航总述、分类介绍、MATLABdemo
  • PROFIBUS转PROFINET网关:饲料行业的通信桥梁
  • LeetCode 543 二叉树的直径
  • 使用Miniconda管理Python环境
  • MS3494模拟矩阵开关
  • transformer-PositionalEncoding (对数空间计算实现)
  • 行业案例 | OPPO借助Azure AI Speech国际服务实现音频文件智能转录
  • 基于MATLAB的二维圆形随机骨料生成程序
  • APL Photonics封面成果:KAUST用五边形激光腔刷新物理随机数生成极限——800Gb/s!
  • Selenium 测试框架 - JavaScript
  • Xamarin入门笔记(Xamarin已经被MAUI取代)
  • 利益相关者意见分歧,如何决策
  • 在线临床指标分类信息表转甜甜圈矩阵图
  • 将git最后一次提交把涉及到的文件按原来目录结构提取出来
  • LLM中的Loss与Logits详解
  • 【leetcode】206. 反转链表
  • Linux Shellcode开发(Stager Reverse Shell)
  • 简述MySQL优化锁方面你有什么建议?
  • 彰显国产力量|暴雨亮相2025 C3安全峰会
  • Guava限频器RateLimiter的使用示例