跳到主要内容

MySQL 日期时间函数

在MySQL中,日期和时间是常见的数据类型,用于存储和操作与时间相关的信息。MySQL提供了丰富的日期时间函数,帮助我们在查询中处理日期和时间数据。本文将介绍一些常用的日期时间函数,并通过示例展示它们的用法。

1. 获取当前日期和时间

MySQL提供了多个函数来获取当前的日期和时间:

  • NOW():返回当前的日期和时间。
  • CURDATE():返回当前的日期。
  • CURTIME():返回当前的时间。
sql
SELECT NOW(), CURDATE(), CURTIME();

输出:

+---------------------+------------+-----------+
| NOW() | CURDATE() | CURTIME() |
+---------------------+------------+-----------+
| 2023-10-05 14:30:00 | 2023-10-05 | 14:30:00 |
+---------------------+------------+-----------+

2. 提取日期和时间的部分

有时我们需要从日期时间值中提取特定的部分,如年、月、日、小时、分钟等。MySQL提供了以下函数:

  • YEAR():提取年份。
  • MONTH():提取月份。
  • DAY():提取日。
  • HOUR():提取小时。
  • MINUTE():提取分钟。
  • SECOND():提取秒。
sql
SELECT 
YEAR(NOW()) AS year,
MONTH(NOW()) AS month,
DAY(NOW()) AS day,
HOUR(NOW()) AS hour,
MINUTE(NOW()) AS minute,
SECOND(NOW()) AS second;

输出:

+------+-------+------+------+--------+--------+
| year | month | day | hour | minute | second |
+------+-------+------+------+--------+--------+
| 2023 | 10 | 5 | 14 | 30 | 0 |
+------+-------+------+------+--------+--------+

3. 日期和时间的计算

MySQL允许我们对日期和时间进行加减操作。常用的函数包括:

  • DATE_ADD():在日期上添加一个时间间隔。
  • DATE_SUB():从日期中减去一个时间间隔。
  • DATEDIFF():计算两个日期之间的天数差。
sql
SELECT 
DATE_ADD(NOW(), INTERVAL 1 DAY) AS tomorrow,
DATE_SUB(NOW(), INTERVAL 1 MONTH) AS last_month,
DATEDIFF('2023-12-31', '2023-10-05') AS days_remaining;

输出:

+---------------------+---------------------+----------------+
| tomorrow | last_month | days_remaining |
+---------------------+---------------------+----------------+
| 2023-10-06 14:30:00 | 2023-09-05 14:30:00 | 87 |
+---------------------+---------------------+----------------+

4. 格式化日期和时间

MySQL提供了DATE_FORMAT()函数,用于将日期时间值格式化为指定的字符串格式。

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

输出:

+---------------------+
| formatted_date |
+---------------------+
| 2023-10-05 14:30:00 |
+---------------------+

常见的格式化符号包括:

  • %Y:四位数的年份。
  • %m:两位数的月份。
  • %d:两位数的日。
  • %H:两位数的小时(24小时制)。
  • %i:两位数的分钟。
  • %s:两位数的秒。

5. 实际应用场景

场景1:计算用户的年龄

假设我们有一个用户表users,其中包含用户的出生日期birthdate。我们可以使用YEAR()CURDATE()函数来计算用户的年龄。

sql
SELECT 
name,
birthdate,
YEAR(CURDATE()) - YEAR(birthdate) AS age
FROM users;

场景2:查询最近7天的订单

假设我们有一个订单表orders,其中包含订单的创建时间created_at。我们可以使用DATE_SUB()函数来查询最近7天的订单。

sql
SELECT *
FROM orders
WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 7 DAY);

6. 总结

MySQL的日期时间函数为我们提供了强大的工具来处理和操作日期时间数据。通过本文的介绍,你应该已经掌握了如何获取当前日期时间、提取日期时间的部分、进行日期时间的计算以及格式化日期时间。这些函数在实际开发中非常有用,尤其是在处理与时间相关的数据时。

7. 附加资源与练习

  • 练习1:编写一个查询,计算从今天到年底还有多少天。
  • 练习2:编写一个查询,将当前日期格式化为YYYY年MM月DD日的格式。
提示

如果你想深入学习MySQL的日期时间函数,可以参考MySQL官方文档