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 年份,
MONTH('2023-05-15') AS 月份,
DAY('2023-05-15') AS 日期,
HOUR('14:30:45') AS 小時,
MINUTE('14:30:45') AS 分鐘,
SECOND('14:30:45') AS 秒;

此查詢將為我們整齊地提取日期和時間的每個部分。

實際應用

想像一下,您正在構建一個顯示用戶生日的網站。您可以使用 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 明天,
DATE_SUB('2023-05-15', INTERVAL 1 MONTH) AS 上個月,
DATEDIFF('2023-05-15', '2023-01-01') AS 新年以來的天數;

此查詢將向我們展示明天的日期、一個月前的日期以及自新年以來經過的天數。

間隔的力量

在 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 格式化的日期;

這將輸出:"星期一, 五月 15, 2023 at 02:30 PM"

跟在 % 符號後面的字母是格式說明符。以下是一些常見的:

說明符 描述
%W 完整的工作日名稱
%M 完整的月份名稱
%d 月份中的日期(01-31)
%Y 四位數的年份
%h 小時(01-12)
%i 分鐘(00-59)
%p AM 或 PM

綜合運用

讓我們將所學的內容結合到一個實際的例子中。想像一下,我們正在構建一個跟蹤員工工作週年紀念日的系統:

CREATE TABLE 員工 (
id INT PRIMARY KEY,
姓名 VARCHAR(100),
入職日期 DATE
);

INSERT INTO 員工 VALUES
(1, 'Alice', '2020-06-15'),
(2, 'Bob', '2021-03-20'),
(3, 'Charlie', '2019-11-01');

SELECT
姓名,
入職日期,
YEAR(CURDATE()) - YEAR(入職日期) AS 任職年數,
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(入職日期), '-', DAY(入職日期))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(入職日期), '-', DAY(入職日期))), 1, 0) YEAR)
AS 下一次週年紀念日,
DATEDIFF(
DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(入職日期), '-', DAY(入職日期))),
INTERVAL IF(CURDATE() > DATE(CONCAT(YEAR(CURDATE()), '-', MONTH(入職日期), '-', DAY(入職日期))), 1, 0) YEAR),
CURDATE()
) AS 距離週年紀念日的天數
FROM 員工;

此查詢做了幾件事:

  1. 它計算每位員工在公司工作的年數。
  2. 它確定他們下一次工作週年紀念日的日期。
  3. 它計算距離下一次週年紀念日還有多少天。

結論

恭喜!您剛剛邁出了進入 MySQL 日期和時間函式世界的第一步。我們涵蓋了獲取當前日期和時間、提取日期部分、進行日期算術和格式化日期以顯示的基礎知識。

記住,熟能生巧。嘗試使用這些函式創建自己的查詢。也許可以構建我之前提到的生日提醒應用程式!您越多地使用這些函式,您就會越熟悉。

並且永遠記住:在編程的世界中,每一天都是學習和成長的新機會。快樂編碼,未來的資料庫大師!

Credits: Image by storyset