在 MySQL 中,日期和时间的查询是非常常见的需求。为了满足不同场景的查询需求,MySQL 提供了强大的日期处理函数和操作符。以下是日期查询的常见用法,帮助你轻松处理各种日期相关的操作。
🗓️ 1. 日期类型介绍
MySQL 支持以下几种日期类型:
DATE
:日期(YYYY-MM-DD
)DATETIME
:日期和时间(YYYY-MM-DD HH:MM:SS
)TIMESTAMP
:时间戳,通常用于记录事件发生的时刻,精确到秒(YYYY-MM-DD HH:MM:SS
)TIME
:时间(HH:MM:SS
)YEAR
:年份(YYYY
)
📅 2. 获取当前日期和时间
2.1 获取当前日期
SELECT CURDATE(); -- 返回当前日期,格式:YYYY-MM-DD
2.2 获取当前时间
SELECT CURTIME(); -- 返回当前时间,格式:HH:MM:SS
2.3 获取当前日期和时间
SELECT NOW(); -- 返回当前日期和时间,格式:YYYY-MM-DD HH:MM:SS
2.4 获取当前时间戳
SELECT UNIX_TIMESTAMP(); -- 返回当前的 Unix 时间戳(秒级)
📆 3. 日期格式转换
3.1 将字符串转换为日期
SELECT STR_TO_DATE('2025-07-11', '%Y-%m-%d'); -- 将字符串转换为日期
3.2 将日期转换为字符串
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 将日期格式化为指定的字符串
常见格式化符号:
%Y
:年份(四位)%m
:月份(两位)%d
:日(两位)%H
:小时(24小时制)%i
:分钟%s
:秒
📅 4. 日期加减操作
4.1 日期加天数
SELECT DATE_ADD('2025-07-11', INTERVAL 5 DAY); -- 返回 2025-07-16
4.2 日期减天数
SELECT DATE_SUB('2025-07-11', INTERVAL 5 DAY); -- 返回 2025-07-06
4.3 计算日期差(返回天数)
SELECT DATEDIFF('2025-07-11', '2025-07-01'); -- 返回 10,表示两个日期的天数差
4.4 计算两个日期之间的时间差
SELECT TIMESTAMPDIFF(DAY, '2025-07-01', '2025-07-11'); -- 返回 10,按天数计算差距
SELECT TIMESTAMPDIFF(HOUR, '2025-07-01 12:00:00', '2025-07-11 12:00:00'); -- 返回 240
🗓️ 5. 查询特定日期范围的数据
5.1 查询某个日期之后的数据
SELECT * FROM orders WHERE order_date > '2025-07-01'; -- 查询2025年7月1日之后的订单
5.2 查询某个日期之前的数据
SELECT * FROM orders WHERE order_date < '2025-07-01'; -- 查询2025年7月1日之前的订单
5.3 查询某个日期范围内的数据
SELECT * FROM orders WHERE order_date BETWEEN '2025-07-01' AND '2025-07-31'; -- 查询7月内的所有订单
5.4 查询本月的数据
SELECT * FROM orders WHERE YEAR(order_date) = YEAR(CURDATE()) AND MONTH(order_date) = MONTH(CURDATE());
5.5 查询本周的数据(从周一开始到今天)
SELECT * FROM orders WHERE order_date >= CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY;
📅 6. 常见的日期查询
6.1 查询过去某天的数据(例如过去7天)
SELECT * FROM orders WHERE order_date >= CURDATE() - INTERVAL 7 DAY;
6.2 查询今天的数据
SELECT * FROM orders WHERE DATE(order_date) = CURDATE();
6.3 查询本年度的数据
SELECT * FROM orders WHERE YEAR(order_date) = YEAR(CURDATE());
6.4 查询某个月的数据
SELECT * FROM orders WHERE YEAR(order_date) = 2025 AND MONTH(order_date) = 7; -- 查询2025年7月的订单
🧭 7. 时间戳的使用
7.1 将时间戳转换为日期
SELECT FROM_UNIXTIME(1626038400); -- 2021-07-11 00:00:00
7.2 获取当前时间戳
SELECT UNIX_TIMESTAMP(); -- 返回当前 Unix 时间戳
📅 8. 复杂日期查询的实际案例
假设你有一个 sales
表,用于记录销售数据,字段包括 sale_date
和 amount
,你需要查询:
- 最近30天内的总销售额
- 本季度的销售额
- 上个月的销售额
8.1 最近30天的总销售额
SELECT SUM(amount) AS total_sales
FROM sales
WHERE sale_date >= CURDATE() - INTERVAL 30 DAY;
8.2 本季度的销售额
SELECT SUM(amount) AS total_sales
FROM sales
WHERE YEAR(sale_date) = YEAR(CURDATE()) AND QUARTER(sale_date) = QUARTER(CURDATE());
8.3 上个月的销售额
SELECT SUM(amount) AS total_sales
FROM sales
WHERE sale_date >= DATE_FORMAT(CURRENT_DATE - INTERVAL 1 MONTH, '%Y-%m-01')
AND sale_date < DATE_FORMAT(CURRENT_DATE, '%Y-%m-01');
📝 总结
通过本篇文章,你可以了解并掌握 MySQL 中常见的日期操作和查询方法。使用这些查询技巧,你可以轻松地处理日期数据,包括:
- 获取当前日期和时间
- 日期加减操作
- 日期格式转换
- 日期范围查询
- 时间戳操作
发表回复