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

MySQL 日期和时间函数知识点总结

引言

在数据库管理和开发中,日期查询是一项基础且频繁使用的功能。MySQL提供了丰富的日期和时间处理函数,使得我们能够灵活地进行日期查询和数据处理。本文将详细介绍MySQL中关于日期查询的几个重要知识点,并附上具体的案例。

1. MySQL的日期时间类型

MySQL支持多种日期时间类型,主要包括 DATETIME、TIMESTAMP、DATE、TIME、YEAR 等。每种类型都有其特定的应用场景和存储格式。

  • DATETIME:占用8字节,格式为YYYY-MM-DD HH:MM:SS,日期范围从1000-01-01 00:00:00到9999-12-31 23:59:59。
  • TIMESTAMP:占用4字节,格式为YYYY-MM-DD HH:MM:SS,但范围较小,从1970-01-01 00:00:01 UTC到2038年某个时间点。
  • DATE:占用3字节,格式为YYYY-MM-DD,范围从1000-01-01到9999-12-31。
  • TIME:表示时间(或持续时间),格式为HH:MM:SS。
  • YEAR:仅表示年份,格式为YYYY。
  • MONTH(): 函数用于从日期中提取月份值,返回一个1到12之间的整数,表示月份。

使用案例

CREATE TABLE orders (  id INT AUTO_INCREMENT PRIMARY KEY,  order_date DATETIME,  order_amount DECIMAL(10, 2)  
);  INSERT INTO orders (order_date, order_amount) VALUES ('2023-01-01 12:00:00', 100.00);

2. 日期和时间函数

MySQL提供了大量的日期和时间函数,用于进行日期和时间的计算和格式化。

  • CURDATE() 和 CURRENT_DATE:返回当前系统的日期值。
  • CURTIME() 和 CURRENT_TIME:返回当前系统的时间值。
  • NOW() 和 SYSDATE():返回当前系统的日期和时间值。
  • UNIX_TIMESTAMP():返回UNIX时间戳。
  • FROM_UNIXTIME():将UNIX时间戳转换为日期时间格式。
  • DATE_ADD() 和 ADDDATE():向日期添加指定的时间间隔。
  • DATE_SUB() 和 SUBDATE():从日期减去指定的时间间隔。
  • DATEDIFF():计算两个日期之间的天数差。
  • DATE_FORMAT():将日期格式化为指定的字符串格式。

使用案例

查询今天的所有订单:

SELECT * FROM orders WHERE DATE(order_date) = CURDATE();

查询过去7天内的订单:

SELECT * FROM orders WHERE order_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE();

DATE_FORMAT() 日期格式化

  1. 查询订单,并将订单日期格式化为“年-月-日”的格式:
SELECT   DATE_FORMAT(order_date, '%Y-%m-%d') AS formatted_order_date
FROM  orders;
  1. 获取当前日期并转换为’%Y%m%dT%H%i%s’,例如 2023-09-14 00:00:00
DATE_FORMAT(CURDATE(), '%Y-%m-%d %H:%i:%s')
  1. 获取当前日期并转换为 20230921T000000 格式
DATE_FORMAT(CURDATE(), ''%Y%m%dT%H%i%s'')
  1. 获取当前日期前一周的时间并转换为 ‘%Y%m%dT%H%i%s’ 格式
DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 7 DAY), '%Y-%m-%d %H:%i:%s') 

3. 按日期范围查询

在实际应用中,经常需要查询某个日期范围内的数据。这可以通过BETWEEN操作符或者比较操作符(>、<等)来实现。

案例
查询2023年1月份的所有订单:

SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31';

或者,使用YEAR()和MONTH()函数:

SELECT * FROM orders WHERE YEAR(order_date) = 2023 AND MONTH(order_date) = 1;

4. 特殊日期查询

MySQL还支持查询特定日期,如今天、昨天、本周、本月等的数据。

案例
查询昨天的订单:

SELECT * FROM orders WHERE order_date = DATE_SUB(CURDATE(), INTERVAL 1 DAY);

或者:

SELECT * FROM orders WHERE order_date >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND order_date < CURDATE();

查询本月的订单:

SELECT * FROM orders WHERE YEAR(order_date) = YEAR(CURDATE()) AND MONTH(order_date) = MONTH(CURDATE());

或者使用DATE_FORMAT函数:

SELECT * FROM orders WHERE DATE_FORMAT(order_date, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m');

5. 时间和时间戳的转换

在处理数据库时,经常需要将时间和时间戳进行转换。MySQL提供了FROM_UNIXTIME()和UNIX_TIMESTAMP()函数来完成这一任务。

案例
将时间戳转换为日期时间格式:

SELECT FROM_UNIXTIME(1672531200);

将日期时间转换为UNIX时间戳:

SELECT UNIX_TIMESTAMP('2023-01-01 12:00:00');

6. 实战案例-生成特定时间范围内的日期列表

MySQL 8.0引入了递归的公用表表达式(CTE),这使得生成日期序列变得更加容易和灵活。

以下 SQL 将生成 ‘2023-01-01’~‘2023-01-10’ 的日期列表:

WITH RECURSIVE date_series AS (  SELECT '2023-01-01' AS date  UNION ALL  SELECT DATE_ADD(date, INTERVAL 1 DAY)  FROM date_series  WHERE date < '2023-01-10'  
)  
SELECT * FROM date_series;

结语

通过本文,我们详细了解了MySQL中关于日期查询的多个知识点,包括日期时间类型、日期和时间函数、按日期范围查询、特殊日期查询以及时间和时间戳的转换。希望这些内容能够帮助你在实际开发中更好地处理日期相关的数据。

http://www.lryc.cn/news/392561.html

相关文章:

  • 鸿蒙登录页面及页面跳转的设计
  • 【居家养老实训室】:看中医保健在养老中的应用
  • 【区块链+基础设施】区块链服务网络 BSN | FISCO BCOS应用案例
  • 六、快速启动框架:SpringBoot3实战-个人版
  • SA 注册流程
  • 图像的灰度直方图
  • 软件测试面试题:Redis的五种数据结构,以及使用的场景是什么?
  • Java后端每日面试题(day1)
  • AI与测试相辅相成
  • 搜索+动态规划
  • strcpy,srtcmp,strlen函数漏洞利用
  • SketchUp + Enscape+ HTC Focus3 VR
  • 推荐3款Windows系统的神级软件,免费、轻量、绝对好用!
  • -bash: /snap/bin/docker: 没有那个文件或目录
  • [深度学习]卷积理解
  • 基于aardio web.view2库和python playwright包的内嵌浏览器自动化操作
  • 《数据仓库与数据挖掘》 总复习
  • EtherCAT主站IGH-- 8 -- IGH之domain.h/c文件解析
  • 《昇思25天学习打卡营第10天|使用静态图加速》
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十二)
  • 六西格玛绿带培训如何告别“走过场”?落地生根
  • Linux——提取包文件到指定目录,命令解释器-shell,type 命令
  • 【最详细】PhotoScan(MetaShape)全流程教程
  • Excel多表格合并
  • AI作画工具深度剖析:Midjourney vs. Stable Diffusion (SD)
  • ASP.NET Core Blazor 5:Blazor表单和数据
  • C++ 仿QT信号槽二
  • 联合概率密度函数
  • 【Java10】成员变量与局部变量
  • Spring Session与分布式会话管理详解