SQL:MySQL函数:日期函数(Date Functions)

news2025/5/13 8:48:31

目录

时间是数据的一种类型

🧰 MySQL 常用时间函数大全

🟦 1. 获取当前时间/日期

🟦 2. 日期运算(加减)

🟦 3. 时间差计算

🟦 4. 格式化日期

🟦 5. 提取时间部分

🟦 6. 时间戳相关 

 函数之间的联系


时间是数据的一种类型

我们用 MySQL 存储时间,其实和存储数字、字符串一样,时间是 一类特殊的数据类型DATE / DATETIME / TIMESTAMP)。

所以我们要处理它,比如:

  • 现在是什么时间?(取值)

  • 某个时间加上 3 天是多少?(运算)

  • 两个时间差多少?(对比)

  • 显示成“年-月-日”?(格式化)

于是我们需要一类“时间函数工具箱”来完成这些任务。


🧰 MySQL 常用时间函数大全

🟦 1. 获取当前时间/日期

函数名中文含义示例返回
NOW()当前日期和时间SELECT NOW();2025-05-08 20:21:00
CURDATE()当前日期(不包括时间)SELECT CURDATE();2025-05-08
CURTIME()当前时间(不包括日期)SELECT CURTIME();20:21:00

适用场景:记录操作时间、筛选“今天”的数据、判断是否超期。

🟦 2. 日期运算(加减)

函数名中文含义示例返回
DATE_ADD(d, INTERVAL n unit)某日期加上时间间隔DATE_ADD('2024-01-01', INTERVAL 3 DAY)2024-01-04
DATE_SUB(d, INTERVAL n unit)某日期减去时间间隔DATE_SUB('2024-01-10', INTERVAL 1 MONTH)2023-12-10
  • unit 可以是 DAY, MONTH, YEAR, HOUR, MINUTE 等。

适用场景:查“过去 7 天”/“近 1 个月”的记录。

DATE_ADD(date, INTERVAL expr unit)

  • 功能:给日期加上指定的时间间隔。

  • 语法:

SELECT DATE_ADD('2025-05-13', INTERVAL 10 DAY);  -- 加10天

DATE_SUB(date, INTERVAL expr unit)

  • 功能:从日期中减去时间间隔。

  • 语法:

SELECT DATE_SUB('2025-05-13', INTERVAL 1 MONTH);  -- 减1个月

🟦 3. 时间差计算

函数名中文含义示例返回
DATEDIFF(d1, d2)d1 - d2 相差多少(整数)DATEDIFF('2025-05-10', '2025-05-01')9
TIMESTAMPDIFF(unit, d1, d2)相差多少单位(更灵活)TIMESTAMPDIFF(MONTH, '2023-01-01', '2025-05-01')28
  • unit 也可以是 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR

适用场景:计算会员时长、距离到期还有几天、是否超时。

DATEDIFF(date1, date2)

  • 功能:计算两个日期之间的天数差值(date1 - date2)。

  • 语法:

SELECT DATEDIFF('2025-05-13', '2025-05-01');  -- 返回 12

TIMESTAMPDIFF(unit, datetime1, datetime2)

  • 功能:计算两个时间之间的差值,可指定单位(SECOND, MINUTE, HOUR, DAY, MONTH, YEAR)。

  • 语法:

SELECT TIMESTAMPDIFF(DAY, '2025-05-01', '2025-05-13'); -- 返回 12

🟦 4. 格式化日期

函数名中文含义示例返回
DATE_FORMAT(d, format)格式化时间DATE_FORMAT(NOW(), '%Y-%m-%d')2025-05-08

适用场景:前端展示、日志格式化、分组查询(比如按月统计)。

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');

 常用格式符号

符号含义
%Y四位数年份(2025)
%y两位数年份(25)
%m月份(01–12)
%d日期(01–31)
%H小时(00–23)
%i分钟(00–59)
%s秒(00–59)

🟦 5. 提取时间部分

函数名中文含义示例返回
YEAR(d)提取年份YEAR(NOW())2025
MONTH(d)提取月份MONTH('2024-08-15')8
DAY(d)提取日期DAY('2025-05-08')8
HOUR(d)小时HOUR('20:15:00')20

适用场景:按年月日分组、按小时分布分析。 

YEAR(date)

  • 功能:提取年份。

  • 语法:

SELECT YEAR('2025-05-13');  -- 返回 2025

DAY(date)DAYOFMONTH(date)

  • 功能:提取日期中的“日”部分。

  • 语法:

SELECT DAY('2025-05-13');  -- 返回 13

HOUR(time) / MINUTE(time) / SECOND(time)

  • 功能:提取时间的时、分、秒。

  • 示例:

SELECT HOUR('14:32:10');     -- 返回 14
SELECT MINUTE('14:32:10');   -- 返回 32
SELECT SECOND('14:32:10');   -- 返回 10

🟦 6. 时间戳相关 

时间戳(Timestamp)是指从一个特定的起点时间开始所经过的总秒数,通常用于表示某个时刻。它是计算机中一种常见的时间表示方式,可以精确、方便地进行时间计算和排序。 

  • Unix时间戳(Unix Timestamp):是自1970年1月1日 00:00:00 UTC以来所经过的总秒数。

  • 它是一个整数(精确到秒),例如:

1715601130

表示的是 2025年5月13日 13:32:10(UTC) 左右。 

时间戳的特点

特性描述
精度高精确到秒(也可毫秒、微秒)
易于比较时间戳是整数,直接比较大小即可判断前后
跨平台通用适用于大多数编程语言和数据库
不含时区信息默认以UTC计算,需要转换为本地时间

UNIX_TIMESTAMP()

  • 功能:获取当前时间的 Unix 时间戳(单位:秒)

  • 示例:

SELECT UNIX_TIMESTAMP();
-- 返回:1715601130

FROM_UNIXTIME(timestamp)

  • 功能:将 Unix 时间戳转为可读的日期时间

  • 示例:

SELECT FROM_UNIXTIME(1715601130);
-- 返回:2025-05-13 13:32:10

UNIX_TIMESTAMP(date)

  • 功能:将一个标准时间转为 Unix 时间戳

  • 示例:

SELECT UNIX_TIMESTAMP('2025-05-13 13:32:10');
-- 返回:1715601130

 

 函数之间的联系

可以把它们看成一个工具链:

     [当前时间]         [日期格式化]
     NOW()   CURDATE() ───> DATE_FORMAT()

     ↓                    ↑
  DATE_ADD()           TIMESTAMPDIFF()
  DATE_SUB()           DATEDIFF()
     ↓                    ↑
   生成目标时间       计算时间差

     ↓                    ↑
   YEAR(), MONTH(), DAY() ←────提取某部分

示例:

-- 查询本月注册的用户
SELECT * FROM users 
WHERE DATE_FORMAT(created_at, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m');

-- 计算某订单创建以来已过天数
SELECT DATEDIFF(NOW(), order_created_at) AS days_elapsed
FROM orders;

-- 添加30天后的到期时间
SELECT DATE_ADD(created_at, INTERVAL 30 DAY) AS expiry_date
FROM users;

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

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

相关文章

内存 -- Linux内核内存分配机制

内存可以怎么用? kmalloc:内核最常用,用于频繁使用的小内存申请 alloc_pages:以页框为单位申请,物理内存连续 vmalloc:虚拟地址连续的内存块,物理地址不连线 dma_alloc_coherent:常…

关于读写锁的一些理解

同一线程的两种情况: 读读: public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock new ReentrantReadWriteLock();Lock readLock lock.readLock();Lock writeLock lock.writeLock();readLock.lock();S…

C++修炼:模板进阶

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

android-ndk开发(10): use of undeclared identifier ‘pthread_getname_np‘

1. 报错描述 使用 pthread 获取线程名字&#xff0c; 用到 pthread_getname_np 函数。 交叉编译到 Android NDK 时链接报错 test_pthread.cpp:19:5: error: use of undeclared identifier pthread_getname_np19 | pthread_getname_np(thread_id, thread_name, sizeof(thr…

UI自动化测试框架:PO 模式+数据驱动

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成…

Java笔记4

第一章 static关键字 2.1 概述 以前我们定义过如下类&#xff1a; public class Student {// 成员变量public String name;public char sex; // 男 女public int age;// 无参数构造方法public Student() {}// 有参数构造方法public Student(String a) {} }我们已经知道面向…

2025年渗透测试面试题总结-渗透测试红队面试八(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试八 二百一十一、常见中间件解析漏洞利用方式 二百一十二、MySQL用户密码存储与加密 …

MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构

大家好&#xff0c;我是此林。 目录 1. 前言 2. minimind模型源码解读 1. MiniMind Config部分 1.1. 基础参数 1.2. MOE配置 2. MiniMind Model 部分 2.1. MiniMindForCausalLM: 用于语言建模任务 2.2. 主干模型 MiniMindModel 2.3. MiniMindBlock: 模型的基本构建块…

如何进行前端性能测试?--性能标准

如何进行前端性能测试&#xff1f;–性能标准 前端性能测试指标&#xff1a; 首次加载阶段 场景&#xff1a;用户首次访问网页&#xff0c;在页面还未完全呈现各种内容和功能时的体验。重要指标及原因 首次内容绘制&#xff08;FCP - First Contentful Paint&#xff09;​…

通信网络编程——JAVA

1.计算机网络 IP 定义与作用 &#xff1a;IP 地址是在网络中用于标识设备的数字标签&#xff0c;它允许网络中的设备之间相互定位和通信。每一个设备在特定网络环境下都有一个唯一的 IP 地址&#xff0c;以此来确定其在网络中的位置。 分类 &#xff1a;常见的 IP 地址分为 I…

Off-Policy策略演员评论家算法SAC详解:python从零实现

引言 软演员评论家&#xff08;SAC&#xff09;是一种最先进的Off-Policy策略演员评论家算法&#xff0c;专为连续动作空间设计。它在 DDPG、TD3 的基础上进行了显著改进&#xff0c;并引入了最大熵强化学习的原则。其目标是学习一种策略&#xff0c;不仅最大化预期累积奖励&a…

热门CPS联盟小程序聚合平台与CPA推广系统开发搭建:助力流量变现与用户增长

一、行业趋势&#xff1a;CPS与CPA模式成流量变现核心 在移动互联网流量红利见顶的背景下&#xff0c;CPS&#xff08;按销售付费&#xff09;和CPA&#xff08;按行为付费&#xff09;模式因其精准的投放效果和可控的成本&#xff0c;成为企业拉新与用户增长的核心工具。 CPS…

Linux系统管理与编程15:vscode与Linux连接进行shell开发

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 【1】打开vscode 【2】点击左下角连接图标 【3】输入远程连接 选择合适的操作系统 输入密码&#xff0c;就进入Linux环境的shell编程了。 在vscode下面粘贴拷贝更方便。比如 然后在v…

RabbitMQ概念详解

什么是消息队列&#xff1f; 消息队列是一种在应用程序之间传递消息的技术。它提供了一种异步通信模式&#xff0c;允许应用程序在不同的时间处理消 息。消息队列通常用于解耦应用程序&#xff0c;以便它们可以独立地扩展和修改。在消息队列中&#xff0c;消息发送者将消息发送…

linux基础操作5------(shell)

一.前言 本文来介绍一下linux的shell&#xff0c;除了最后的那个快捷键&#xff0c;其他的还是做一个了解就行了。 Shell&#xff1a; 蛋壳的意思&#xff0c;是linux中比较重要的一个概念&#xff0c;所有的命令其实都称之为shell命令。 看图解&#xff1a;shell就是内核的一…

BUUCTF 大流量分析(三) 1

BUUCTF:https://buuoj.cn/challenges 文章目录 题目描述&#xff1a;密文&#xff1a;解题思路&#xff1a;flag&#xff1a; 相关阅读 CTF Wiki BUUCTF | 大流量分析 &#xff08;一&#xff09;&#xff08;二&#xff09;&#xff08;三&#xff09; 题目描述&#xff1a; …

vLLM中paged attention算子分析

简要分析vLLM中PA的代码架构和v1与v2的区别 vLLM版本&#xff1a;0.8.4 整体结构分析 首先从torch_bindings.cpp入手分析&#xff1a; 这里可以看到vLLM向pytorch中注册了两个PA算子&#xff1a;v1和v2 其中paged_attention_v1和paged_attention_v2分别实现在csrc/attentio…

多样本整合Banksy空间聚类分析(Visium HD, Xenium, CosMx)

在空间数据分析中&#xff0c;传统的单细胞聚类算法&#xff0c;例如Seurat和Scanpy中的lovain和leiden等聚类算法&#xff0c;通常在处理空间数据时忽略了空间信息。然而&#xff0c;由于细胞状态受其周围细胞的影响&#xff0c;将转录组数据与细胞的空间信息结合起来进行聚类…

使用 OAuth 2.0 保护 REST API

使用 OAuth 2.0 保护 REST API 使用 OAuth 2.0 保护 REST API1.1 不安全的api1.2 安全默认值安全默认值Spring Security 默认值 需要对所有请求进行身份验证Servlet、过滤器和调度程序安全优势 使用所有请求的安全标头进行响应缓存标头 严格传输安全标头内容类型选项需要对所有…

解决下拉框数据提交后回显名称不对

问题背景描述 页面组件使用 antd 的 Select 组件&#xff0c;下拉框的 options 数据是动态获取的&#xff0c;基本就是有value 和 label 属性的对象数组。 提交数据后&#xff0c;我们有一个保存草稿的操作&#xff0c;支持返回或者刷新页面&#xff0c;浏览其他页面之后通过其…