在 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 中常见的日期操作和查询方法。使用这些查询技巧,你可以轻松地处理日期数据,包括:

  • 获取当前日期和时间
  • 日期加减操作
  • 日期格式转换
  • 日期范围查询
  • 时间戳操作