3.1 處理日期和時間的函數列表

日期和時間是數據庫中存儲的最常見的數據類型之一。這就是為什麼使用它們的函數列表非常大。以下是最受歡迎的:

# 功能 描述
1個 CURDATE() 返回當前日期
2個 時間() 返回當前時間
3個 現在(),當地時間() 返回當前日期和當前時間
4個 年() 從日期返回年份
5個 月() 返回日期中的月份
6個 日(),日月() 返回日期中的日期
7 小時() 僅從時間返回數小時
8個 分鐘() 宣佈時間分鐘
9 第二() 從時間返回秒數
10 日名() 返回星期幾的名稱:星期一,...
十一 月名() 返回月份名稱:January, ...
12 星期() 從日期返回週
13 工作日() 返回星期幾的數字:星期一 - 0,星期二 - 1
14 年周() 返回一年中的第幾週
15 星期幾() 返回星期幾的數字:週日 - 1,週一 - 2
16 年年日() 返回一年中的第幾天:1-366
17 日期() 僅返回“datetime”對象的日期
18 添加() 向日期添加天數
19 SUBDATE() 從日期中減去天數
20 添加時間() 不定時添加
21 子時間() 從時間中減去時間

我特意將功能分成小組,以便更容易理解如何使用它們。下面我們將考慮每組中的一個函數。

您可以在鏈接中找到用於處理日期和時間的函數的完整列表: https: //dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

3.2 調用函數

順便說一句,既然我們正在學習這麼多函數,我認為提及運算符SELECT不必與 一起使用是有幫助的FROM。它可以返回任何表達式的值。模板給出了其一般視圖:

SELECT expression

如果你想調用一些函數,那麼你需要編寫如下代碼:

SELECT function(options)

下面我將給出一些不借助表格的運算符的操作示例SELECT

# 要求 結果
1個 選擇 1+1 2個
2個 選擇 13 MOD 5 3個
3個 選擇蘭德() 0.20771444235715497
4個 選擇CURDATE() 2022-06-04
5個 選擇時間() 00:06:02
6個 現在選擇() 2022-06-04 00:06:43

而且,如您所見,在上表中,為了獲取當前日期和時間,您只需要使用以下函數之一:

  • CURDATE()- 當前日期;
  • CURTIME()- 當前時間;
  • NOW()– 當前日期和時間。

3.3 按年月分組數據

讓我們回憶一下我們的任務表,其中包含員工的任務。讓我們嘗試按年份對該表中的任務進行分組。為此,我們使用函數YEAR(),它返回傳遞給它的日期的年份。

我們查詢的第一個版本將如下所示:

SELECT
    id,
    employee_id ,
    name,
    YEAR(deadline) AS year,
    deadline
FROM task

此查詢的結果將是:

ID 員工ID 姓名 最後期限
1個 1個 修復一個前端bug 2022年 2022-06-01
2個 2個 修復後端的一個bug 2022年 2022-06-15
3個 5個 買咖啡 2022年 2022-07-01
4個 5個 買咖啡 2022年 2022-08-01
5個 5個 買咖啡 2022年 2022-09-01
6個 (無效的) 打掃辦公室 (無效的) (無效的)
7 4個 享受生活 (無效的) (無效的)
8個 6個 享受生活 (無效的) (無效的)

我們可以看到所有行都有相同的年份,所以讓我們使用兩個字段 - 年和月。我們查詢的第二個版本將如下所示:

SELECT
    id,
    employee_id ,
    name,
    YEAR(deadline) AS year,
    MONTH(deadline) AS month,
    deadline
FROM task

此查詢的結果將是:

ID 員工ID 姓名 最後期限
1個 1個 修復一個前端bug 2022年 6個 2022-06-01
2個 2個 修復後端的一個bug 2022年 6個 2022-06-15
3個 5個 買咖啡 2022年 7 2022-07-01
4個 5個 買咖啡 2022年 8個 2022-08-01
5個 5個 買咖啡 2022年 9 2022-09-01
6個 (無效的) 打掃辦公室 (無效的) (無效的) (無效的)
7 4個 享受生活 (無效的) (無效的) (無效的)
8個 6個 享受生活 (無效的) (無效的) (無效的)

我不會告訴你如何按年和月對任務進行分組——你已經學過這個:使用運算符GROUP BY