建立日期或時間
在這個關於日期和時間的系列文章中,我們探討了 MySQL 的五種時序資料類型,以及它的眾多日期或時間導向的函式。在本文章中,我們將介紹幾種在 MySQL 中建立日期和時間的方法。
使用 MAKEDATE() 函式
在第 3 部分中,我們簡要介紹了 MAKEDATE() 函式。它接受 year 和 dayofyear 並傳回結果日期值。例如,MAKEDATE(2021, 200) 將傳回一個日期「2021-07-19」。這種函式的缺點應該顯而易見;如果你有 year、month 和 day,那麼需要一些計算來確定 dayofyear。在這種情況下,可以透過將 MAKEDATE() 與 DATE_ADD() 組合來建立 DATE。day 為 1 的 MAKEDATE() 將為傳回給定年份第一天的 DATE,然後你可以使用 DATE_ADD() 加入 month 和 day。以下是一個僅設定 year 和 month 的範例:
此 SELECT 陳述式還包括日:
MAKETIME() 函式
如果希望只建立時間,MAKETIME() 將傳回一個時間值,該時間值由小時、分鐘和秒引數計算得出:
第二個引數的小數部分可以是毫秒:
STR_TO_DATE() 函式
建立 DATE、TIME 或 DATETIME 的另一個選項是使用 STR_TO_DATE() 函式。它接受一個日期字串和一個格式字串並傳回:
- 如果字串僅包含日期,則為 DATE 值
- 如果字串僅包含時間,則為 TIME 值
- 如果格式字串包含日期和時間部分,則為 DATETIME 值
此外,如果從 str 中提取的日期、時間或日期時間值無效,則 STR_TO_DATE() 傳回 NULL 並產生警告。
一些例子
以下是 Navicat for MySQL 16 中的幾個日期:
掃描從 str 的開頭開始,如果發現格式不符合,則掃描失敗。同時,忽略 str 末尾的額外字元:
未指定的日期或時間部分的值為 0,因此日期或時間字串中未完全指定的值會產生一個結果,其中部分或全部部分設定為0:
有關可用於格式的規範的完整清單,請參閱 MySQL 官方文件中的 DATE_FORMAT() 函式描述。
組合 MAKEDATE()、MAKETIME() 和 STR_TO_DATE() 函式
如果我們有兩個單獨的 DATE 和 TIME 值,我們可以串連 MAKEDATE() 和 MAKETIME() 的結果,然後將組合字串傳遞給 STR_TO_DATE() 來取得 DATETIME 值。雖然這聽起來可能需要繁複的工作,但實際上非常簡單:
總結
在「在 MySQL 中處理日期和時間」的這一部分中,我們介紹了使用 MySQL 的一些專用日期和時間函式在 MySQL 中建立日期和時間的幾種方法。在下一部分中,我們將了解如何在 SELECT 查詢中使用時序資料。