Navicat 部落格

在 MySQL 中處理日期和時間 - 第 4 部分 2022 年 3 月 22 日,由 Robert Gravelle 撰寫

建立日期或時間

在這個關於日期和時間的系列文章中,我們探討了 MySQL 的五種時序資料類型,以及它的眾多日期或時間導向的函式。在本文章中,我們將介紹幾種在 MySQL 中建立日期和時間的方法。

使用 MAKEDATE() 函式

第 3 部分中,我們簡要介紹了 MAKEDATE() 函式。它接受 yeardayofyear 並傳回結果日期值。例如,MAKEDATE(2021, 200) 將傳回一個日期「2021-07-19」。這種函式的缺點應該顯而易見;如果你有 year、month 和 day,那麼需要一些計算來確定 dayofyear。在這種情況下,可以透過將 MAKEDATE() 與 DATE_ADD() 組合來建立 DATE。day 為 1 的 MAKEDATE() 將為傳回給定年份第一天的 DATE,然後你可以使用 DATE_ADD() 加入 month 和 day。以下是一個僅設定 year 和 month 的範例:

makedate_and_date_add (35K)

此 SELECT 陳述式還包括日:

makedate_and_date_add_with_day (44K)

MAKETIME() 函式

如果希望只建立時間,MAKETIME() 將傳回一個時間值,該時間值由小時、分鐘和秒引數計算得出:

maketime (27K)

第二個引數的小數部分可以是毫秒:

maketime_with_fractions (25K)

STR_TO_DATE() 函式

建立 DATE、TIME 或 DATETIME 的另一個選項是使用 STR_TO_DATE() 函式。它接受一個日期字串和一個格式字串並傳回:

  • 如果字串僅包含日期,則為 DATE 值
  • 如果字串僅包含時間,則為 TIME 值
  • 如果格式字串包含日期和時間部分,則為 DATETIME 值

此外,如果從 str 中提取的日期、時間或日期時間值無效,則 STR_TO_DATE() 傳回 NULL 並產生警告。

一些例子

以下是 Navicat for MySQL 16 中的幾個日期:

str_to_date (47K)

掃描從 str 的開頭開始,如果發現格式不符合,則掃描失敗。同時,忽略 str 末尾的額外字元:

str_to_date_times (57K)

未指定的日期或時間部分的值為 0,因此日期或時間字串中未完全指定的值會產生一個結果,其中部分或全部部分設定為0:

str_to_date_times_with_missing_parts (46K)

有關可用於格式的規範的完整清單,請參閱 MySQL 官方文件中的 DATE_FORMAT() 函式描述

組合 MAKEDATE()、MAKETIME() 和 STR_TO_DATE() 函式

如果我們有兩個單獨的 DATE 和 TIME 值,我們可以串連 MAKEDATE() 和 MAKETIME() 的結果,然後將組合字串傳遞給 STR_TO_DATE() 來取得 DATETIME 值。雖然這聽起來可能需要繁複的工作,但實際上非常簡單:

str_to_date_datetime (49K)

總結

在「在 MySQL 中處理日期和時間」的這一部分中,我們介紹了使用 MySQL 的一些專用日期和時間函式在 MySQL 中建立日期和時間的幾種方法。在下一部分中,我們將了解如何在 SELECT 查詢中使用時序資料。

Navicat 文章
頻道記錄
分享
部落格封存檔