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 年份,
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 員工;
此查詢做了幾件事:
- 它計算每位員工在公司工作的年數。
- 它確定他們下一次工作週年紀念日的日期。
- 它計算距離下一次週年紀念日還有多少天。
結論
恭喜!您剛剛邁出了進入 MySQL 日期和時間函式世界的第一步。我們涵蓋了獲取當前日期和時間、提取日期部分、進行日期算術和格式化日期以顯示的基礎知識。
記住,熟能生巧。嘗試使用這些函式創建自己的查詢。也許可以構建我之前提到的生日提醒應用程式!您越多地使用這些函式,您就會越熟悉。
並且永遠記住:在編程的世界中,每一天都是學習和成長的新機會。快樂編碼,未來的資料庫大師!
Credits: Image by storyset