MySQL 日期和时间函数:初学者指南

您好,未来的数据库高手们!今天,我们将踏上穿越 MySQL 日期和时间函数世界的激动人心之旅。如果您以前从未写过一行代码,别担心——我将是您友好的向导,我们将一步一步来。在本教程结束时,您将像专业人士一样操作日期和时间!

MySQL - Date and Time Functions

为什么日期和时间函数很重要

在我们深入探讨之前,让我分享一个小故事。几年前,我的一个学生正在构建一个生日提醒应用程序。他在日期计算方面遇到了困难,直到他发现了 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;

此查询做了几件事:

  1. 它计算每个员工在公司工作的年数。
  2. 它确定他们下一个工作周年纪念日的日期。
  3. 它计算距离他们下一个周年纪念日还有多少天。

结论

恭喜!您刚刚迈出了进入 MySQL 日期和时间函数世界的第一步。我们已经涵盖了获取当前日期和时间、提取日期部分、进行日期算术和格式化日期以进行显示的基础知识。

记住,熟能生巧。尝试使用这些函数创建自己的查询。也许构建我之前提到的生日提醒应用程序!您对这些函数的使用越多,您就会越熟练。

并且永远记住:在编程的世界中,每一天都是学习和成长的新机会。祝您编程愉快,未来的数据库大师们!

Credits: Image by storyset