MySQL 中日期相减的完整指南

MySQL 中日期相减的完整指南

在 MySQL 中,日期相减有几种不同的方法,具体取决于你想要得到的结果类型(天数差、时间差等)。

1. 使用 DATEDIFF() 函数(返回天数差)

SELECT DATEDIFF('2023-05-15', '2023-05-10'); -- 返回 5(天数差)

特点:

  • 计算两个日期之间的天数差
  • 第一个参数是结束日期,第二个是开始日期
  • 结果 = 结束日期 - 开始日期

2. 使用 TIMESTAMPDIFF() 函数(灵活的单位)

-- 计算相差的天数
SELECT TIMESTAMPDIFF(DAY, '2023-05-10', '2023-05-15'); -- 返回 5-- 计算相差的月数
SELECT TIMESTAMPDIFF(MONTH, '2023-01-15', '2023-05-20'); -- 返回 4-- 计算相差的年份
SELECT TIMESTAMPDIFF(YEAR, '2020-01-01', '2023-01-01'); -- 返回 3

支持的单位:

  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR

3. 使用减法运算符(返回时间间隔)

SELECT '2023-05-15 12:00:00' - '2023-05-10 10:30:00';
-- 返回 50230(格式为DDHHMM,不推荐)-- 更安全的做法是转为日期时间对象再减
SELECT CAST('2023-05-15 12:00:00' AS DATETIME) - CAST('2023-05-10 10:30:00' AS DATETIME);

注意:直接减法在MySQL中行为不一致,不推荐使用

4. 计算时间差(TIMEDIFF)

SELECT TIMEDIFF('12:00:00', '10:30:00'); -- 返回 01:30:00
SELECT TIMEDIFF('2023-05-15 12:00:00', '2023-05-15 10:30:00'); -- 返回 01:30:00

特点:

  • 专门计算时间部分差值
  • 返回格式为 HH:MM:SS

5. 获取日期部分并计算

-- 计算两个日期之间的小时差
SELECT TIMESTAMPDIFF(HOUR, '2023-05-10 08:00', '2023-05-10 17:30'); -- 返回 9-- 计算精确到分钟
SELECT TIMESTAMPDIFF(MINUTE, '2023-05-10 08:00', '2023-05-10 17:30'); -- 返回 570

实际应用示例

-- 计算订单处理时长(天)
SELECT order_id, DATEDIFF(shipped_date, order_date) AS processing_days
FROM orders;-- 计算员工年龄(精确到年)
SELECT employee_name, TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age
FROM employees;-- 计算服务时长(精确到小时)
SELECT service_id, TIMESTAMPDIFF(HOUR, start_time, end_time) AS duration_hours
FROM services;

注意事项

  1. 日期格式必须正确(推荐使用’YYYY-MM-DD’格式)
  2. 处理NULL值时结果会为NULL
  3. 对于大日期范围,TIMESTAMPDIFFDATEDIFF更精确
  4. 时区差异会影响包含时间的计算

性能建议

  1. 对日期列建立索引可以提高计算效率
  2. 在WHERE条件中使用日期函数会导致索引失效,如:
    -- 不好的写法(索引失效)
    SELECT * FROM orders WHERE DATEDIFF(CURDATE(), order_date) > 30;-- 好的写法(可以使用索引)
    SELECT * FROM orders WHERE order_date < DATE_SUB(CURDATE(), INTERVAL 30 DAY);
    

掌握这些日期计算方法,可以高效处理各种与时间相关的数据分析和查询需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传奇各版本迭代时间及内容变化,屠龙/嗜魂法杖/逍遥扇第一次出现的时间和版本

​【早期经典版本】 1.10 三英雄传说&#xff1a;2001 年 9 月 28 日热血传奇正式开启公测&#xff0c;这是传奇的第一个版本。游戏中白天与黑夜和现实同步&#xff0c;升级慢&#xff0c;怪物爆率低&#xff0c;玩家需要靠捡垃圾卖金币维持游戏开销&#xff0c;遇到高级别法师…

重塑数学边界:人工智能如何引领数学研究的新纪元

目录 一、人工智能如何重新定义数学研究的边界 &#xff08;一&#xff09;数学与AI的关系&#xff1a;从基础理论到创新思维的回馈 &#xff08;二&#xff09;AI的创造力&#xff1a;突破传统推理的局限 &#xff08;三&#xff09;AI对数学研究的潜在贡献&#xff1a;创…

IP伪装、代理池与分布式爬虫

一、动态代理IP应用&#xff1a;代理池的获取、选择与使用 代理池技术的核心是通过动态切换IP地址&#xff0c;让爬虫看起来像不同用户在访问网站&#xff0c;从而规避封禁。 &#xff08;一&#xff09;代理池的获取途径 1. 免费代理&#xff1a;低成本但高风险 免费代理可…

自然语言处理实战:用CRF打造高精度命名实体识别系统

## 一、从标签游戏到智能系统:命名实体识别的前世今生 在信息爆炸的互联网时代,我们每天面对的海量文本中隐藏着无数有价值的信息。想象一下,当你在浏览新闻时,系统能自动标红所有人名、地点和机构名称——这就是命名实体识别(NER)技术的魔力。从早期的规则匹配到如今的…

Space Engineers 太空工程师 [DLC 解锁] [Steam] [Windows]

Space Engineers 太空工程师 [DLC 解锁] [Steam] [Windows] 需要有游戏正版基础本体&#xff0c;安装路径不能带有中文&#xff0c;或其它非常规拉丁字符&#xff1b; DLC 版本 至最新全部 DLC 后续可能无法及时更新文章&#xff0c;具体最新版本见下载文件说明 DLC 解锁列表&…

JVM——JVM 是如何执行方法调用的?

JVM 是如何执行方法调用的&#xff1f; 在 Java 世界的底层运作中&#xff0c;方法调用机制是理解 Java 虚拟机&#xff08;JVM&#xff09;行为的关键之一。JVM 作为 Java 程序运行的核心&#xff0c;承担着执行字节码、管理内存、调度线程等多项职责。而方法调用作为程序逻辑…

MySQL 数据类型详解:字符串、数字、日期

MySQL 数据类型详解&#xff1a;字符串、数字、日期 在 MySQL 中&#xff0c;选择合适的数据类型对于数据库的存储效率和查询性能至关重要。MySQL 提供了**字符串&#xff08;String&#xff09;、数字&#xff08;Numeric&#xff09;和日期&#xff08;Date & Time&…

题解:P2485 [SDOI2011] 计算器

### 思路 本题是一个比较模板化的题目。 #### 一操作 考虑使用快速幂。 快速幂&#xff0c;只需要把 $k$ 变成二进制即可实现 $\Theta(\log k)$ 的时间复杂度。 实现方法&#xff1a; cpp long long qmi(long long a,long long k,long long p){ long long res 1; …

重新构想E-E-A-T:提升销售与搜索可见性的SEO策略

在2025年的数字营销环境中&#xff0c;谷歌的E-E-A-T&#xff08;经验、专业性、权威性、可信度&#xff09;已成为SEO和内容营销的核心支柱。传统的E-E-A-T优化方法通常聚焦于展示作者资质或获取反向链接&#xff0c;但这些策略可能不足以应对AI驱动的搜索和日益挑剔的用户需求…

JVM 一文详解

目录 JVM 简介 JVM 中的内存区域划分 1. 堆&#xff08;一个进程只有一份 ------ 线程共享&#xff09; 2. 栈&#xff08;一个进程可以有 N 份 ------ 线程私有&#xff09; Java 虚拟机栈&#xff1a; 本机方法栈&#xff1a; 3. 程序计数器&#xff08;一个线程可以…

小程序与快应用:中国移动互联网的渐进式革命——卓伊凡的技术演进观

小程序与快应用&#xff1a;中国移动互联网的渐进式革命——卓伊凡的技术演进观 在知乎看到很多&#xff1a;“懂王”发布的要把内行笑疯了的评论&#xff0c;卓伊凡必须怼一下&#xff0c;真印证那句话&#xff0c;无知者无畏 一、Web与小程序的技术本质差异 1.1 浏览器渲染…

[SC]SystemC在GPU/CPU SoC验证中的应用案例

SystemC在GPU/CPU SoC验证中的应用案例 摘要:SystemC 是一种基于 C++ 的系统级建模语言,广泛用于 SoC (System on Chip) 设计的建模和验证,尤其在 GPU SoC 验证中,SystemC 可用于模拟硬件模块、系统行为和性能评估。SystemC 的主要优势在于支持系统级抽象建模、时序…

Java 网络安全新技术:构建面向未来的防御体系

一、Java 安全架构的演进与挑战 1.1 传统安全模型的局限性 Java 平台自 1995 年诞生以来&#xff0c;安全机制经历了从安全管理器&#xff08;Security Manager&#xff09;到 Java 平台模块系统&#xff08;JPMS&#xff09;的演进。早期的安全管理器通过沙箱模型限制不可信…

sonar-scanner在扫描JAVA项目时为什么需要感知.class文件

1 概述 SonarQube是一个静态代码分析工具&#xff0c;主要用于检查源代码的质量&#xff0c;包括代码重复、潜在漏洞、代码风格问题等。而SonarScanner是SonarQube的客户端工具&#xff0c;负责将代码进行形态分析&#xff0c;并将结果发送到SonarQube服务器。所以&#xff0c…

媒资管理之视频管理

一:业务概述: 媒资管理这个模块是我负责开发的,主要的管理对象是视频,图片,文档等 包括文件的上传,视频的处理,文件的删除 (在媒资管理界面,有个上传视频的按钮,视频是在媒资这上传的,课程图片是在内容管理) 上传的图片和视频,会单独存储到搭建的分布式文件系…

Maven 实现多模块项目依赖管理

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

nuxt项目中引入并配置 iview

安装iview npm install iview --save注&#xff1a;想要加入其它的配置&#xff0c;可以在 nuxt.config.js 的 plugins 配置项中加入&#xff0c;同时在 plugins 文件夹下加入引入逻辑。 在nuxt.config.js文件中写&#xff1a; {src: ~plugins/iview, ssr: true}同时新建 plugi…

BG开发者日志505:项目总体情况

1、从2024年12月中旬启动&#xff0c;到4月底gameplay部分开发完毕&#xff0c;已经四个半月过去了。 其中大部分内容是3、4两个月中完成的&#xff0c;量产阶段。 预计6月初参加新品节&#xff0c;6月中旬发售&#xff08;比原计划7月中旬提前一个月&#xff09;。 --------…

C++ *stream | istream / ostream / iostream 详解

注&#xff1a;本文为 “C *stream” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 Understanding the Utility of Iostreams in C 理解 C 中 iostream 的用途 By Manoj Debnat…

Dagster中的Ops与Assets:数据管道构建的两种选择

Dagster是一个强大的数据编排平台&#xff0c;它提供了多种工具来帮助数据工程师构建可靠的数据管道。在Dagster中&#xff0c;Ops和Assets是两种核心概念&#xff0c;用于定义数据处理逻辑。本文将全面介绍Ops的概念、特性及其使用方法&#xff0c;特别补充了Op上下文和Op工厂…