MySQL 日期和时间函数:初学者指南
您好,未来的数据库高手们!今天,我们将踏上穿越 MySQL 日期和时间函数世界的激动人心之旅。如果您以前从未写过一行代码,别担心——我将是您友好的向导,我们将一步一步来。在本教程结束时,您将像专业人士一样操作日期和时间!
为什么日期和时间函数很重要
在我们深入探讨之前,让我分享一个小故事。几年前,我的一个学生正在构建一个生日提醒应用程序。他在日期计算方面遇到了困难,直到他发现了 MySQL 的日期函数。突然,他的应用程序可以告诉用户距离朋友生日还有多少天。这就像魔法一样!这就是掌握这些函数的力量。
入门:当前日期和时间
让我们从基础开始。MySQL 提供了几个获取当前日期和时间的函数。以下是最常见的几个:
函数 | 描述 | 示例输出 |
---|---|---|
NOW() | 当前日期和时间 | 2023-05-15 14:30:00 |
CURDATE() | 当前日期 | 2023-05-15 |
CURTIME() | 当前时间 | 14:30:00 |
让我们看看实际效果:
SELECT NOW(), CURDATE(), CURTIME();
此查询将返回当前的日期和时间、仅日期和仅时间。非常整洁,对吧?
理解输出
NOW() 函数返回一个日期时间值,其中包括日期和时间。CURDATE() 仅为您提供“YYYY-MM-DD”格式的日期,而 CURTIME() 提供“HH:MM:SS”格式的时间。
提取日期和时间的部分
现在,假设您有一个日期时间值,并且想要提取其中的特定部分。MySQL 为您提供了以下方便的函数:
函数 | 描述 | 示例用法 | 示例输出 |
---|---|---|---|
YEAR() | 提取年份 | YEAR('2023-05-15') | 2023 |
MONTH() | 提取月份 | MONTH('2023-05-15') | 5 |
DAY() | 提取日期 | DAY('2023-05-15') | 15 |
HOUR() | 提取小时 | HOUR('14:30:00') | 14 |
MINUTE() | 提取分钟 | MINUTE('14:30:00') | 30 |
SECOND() | 提取秒 | SECOND('14:30:45') | 45 |
让我们试试这些:
SELECT
YEAR('2023-05-15') AS year,
MONTH('2023-05-15') AS month,
DAY('2023-05-15') AS day,
HOUR('14:30:45') AS hour,
MINUTE('14:30:45') AS minute,
SECOND('14:30:45') AS second;
此查询将为我们整齐地提取日期和时间的每个部分。
实际应用
想象一下,您正在构建一个显示用户生日的网站。您可以使用 MONTH() 和 DAY() 函数从存储的生日中仅提取月份和日期,忽略年份。这样,您可以祝用户生日快乐而不透露他们的年龄!
日期算术:加法和减法
MySQL 日期函数最酷的事情之一是您可以对日期进行数学运算。让我们看看一些用于此的函数:
函数 | 描述 | 示例用法 |
---|---|---|
DATE_ADD() | 向日期添加一个间隔 | DATE_ADD('2023-05-15', INTERVAL 1 DAY) |
DATE_SUB() | 从日期减去一个间隔 | DATE_SUB('2023-05-15', INTERVAL 1 MONTH) |
DATEDIFF() | 查找日期之间的差异 | DATEDIFF('2023-05-15', '2023-01-01') |
以下是我们如何使用这些函数:
SELECT
DATE_ADD('2023-05-15', INTERVAL 1 DAY) AS tomorrow,
DATE_SUB('2023-05-15', INTERVAL 1 MONTH) AS last_month,
DATEDIFF('2023-05-15', '2023-01-01') AS days_since_new_year;
此查询将向我们显示明天的日期、一个月前的日期以及自元旦以来经过的天数。
间隔的力量
在 DATE_ADD() 和 DATE_SUB() 函数中,我们使用 INTERVAL 关键字。这非常灵活——您可以添加或减去年、月、日、小时、分钟甚至秒!
格式化日期和时间
有时,您需要以特定格式呈现日期和时间。这就是 DATE_FORMAT() 函数派上用场的地方:
SELECT DATE_FORMAT('2023-05-15 14:30:00', '%W, %M %d, %Y at %h:%i %p') AS formatted_date;
这将输出:“星期一, 五月 15, 2023 at 02:30 PM”
% 符号后跟字母是格式说明符。以下是一些常见的:
说明符 | 描述 |
---|---|
%W | 完整的星期几名称 |
%M | 完整的月份名称 |
%d | 月份中的日期(01-31) |
%Y | 四位数字的年份 |
%h | 小时(01-12) |
%i | 分钟(00-59) |
%p | AM 或 PM |
综合运用
让我们将所学内容结合到一个实际示例中。假设我们正在构建一个跟踪员工工作周年纪念日的系统:
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
hire_date DATE
);
INSERT INTO employees VALUES
(1, 'Alice', '2020-06-15'),
(2, 'Bob', '2021-03-20'),
(3, 'Charlie', '2019-11-01');
SELECT
name,
hire_date,
YEAR(CURDATE()) - YEAR(hire_date) AS years_employed,
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))), 1, 0) YEAR)
AS next_anniversary,
DATEDIFF(
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(hire_date), '-', DAY(hire_date))), 1, 0) YEAR),
CURDATE()
) AS days_until_anniversary
FROM employees;
此查询做了几件事:
- 它计算每个员工在公司工作的年数。
- 它确定他们下一个工作周年纪念日的日期。
- 它计算距离他们下一个周年纪念日还有多少天。
结论
恭喜!您刚刚迈出了进入 MySQL 日期和时间函数世界的第一步。我们已经涵盖了获取当前日期和时间、提取日期部分、进行日期算术和格式化日期以进行显示的基础知识。
记住,熟能生巧。尝试使用这些函数创建自己的查询。也许构建我之前提到的生日提醒应用程序!您对这些函数的使用越多,您就会越熟练。
并且永远记住:在编程的世界中,每一天都是学习和成长的新机会。祝您编程愉快,未来的数据库大师们!
Credits: Image by storyset