在 MySQL 中處理日期和時(shí)間(四)
第四章節(jié):創(chuàng)建日期和時(shí)間的幾種方法
在這個(gè)關(guān)于日期和時(shí)間的系列中,我們探索了 MySQL 的五種時(shí)態(tài)數(shù)據(jù)類型,以及它的許多面向日期或時(shí)間的函數(shù)中的一些。在本文中,我們將介紹在 MySQL 中創(chuàng)建日期和時(shí)間的幾種方法。
使用 MAKEDATE() 函式
MAKEDATE() 函數(shù),它接受 year 和 dayofyear,并返回生成的日期值。例如,MAKEDATE(2021, 200) 將返回“2021-07-19”的日期。這個(gè)函數(shù)的缺點(diǎn)應(yīng)該很明顯;如果你有 year、month 和 day,則需要進(jìn)行一些計(jì)算來(lái)確定 dayofyear。在這種情況下,你可以通過(guò)將 MAKEDATE() 與 DATE_ADD() 組合來(lái)創(chuàng)建 DATE。day 為 1 的 MAKEDATE() 將為返回給定年份的第一天的 DATE,然后你可以使用 DATE_ADD() 添加月份和日期。這是一個(gè)僅設(shè)置 year 和 month 的示例:

此 SELECT 語(yǔ)句也包括日期:

MAKETIME() 函數(shù)
如果你只想創(chuàng)建一個(gè) TIME,則 MAKETIME() 返回一個(gè)根據(jù)小時(shí)、分鐘和秒?yún)?shù)計(jì)算的時(shí)間值:

第二個(gè)參數(shù)可以有毫秒的小數(shù)部分:

STR_TO_DATE() 函數(shù)
創(chuàng)建 DATE、TIME 或 DATETIME 的另一個(gè)選項(xiàng)是使用 STR_TO_DATE() 函數(shù)。它接受一個(gè)日期字符串和一個(gè)格式字符串并返回:
如果字符串僅包含日期,則為 DATE 值
如果字符串僅包含時(shí)間,則為 TIME 值
如果格式字符串包含日期和時(shí)間部分,則為 DATETIME 值
此外,如果從 str 中提取的日期、時(shí)間或日期時(shí)間值無(wú)效,則 STR_TO_DATE() 返回 NULL 并產(chǎn)生警告。
以下是幾個(gè)日期案例:

掃描從 str 的開(kāi)頭開(kāi)始,如果發(fā)現(xiàn)格式不匹配,則掃描失敗。同時(shí),忽略 str 末尾的額外字符:

未指定的日期或時(shí)間部分的值為 0,因此日期或時(shí)間字符串中未完全指定的值會(huì)產(chǎn)生部分或全部部分設(shè)置為 0 的結(jié)果:

組合 MAKEDATE()、MAKETIME() 和 STR_TO_DATE() 函數(shù)
如果我們有兩個(gè)單獨(dú)的 DATE 和 TIME 值,我們可以連接 MAKEDATE() 和 MAKETIME() 的結(jié)果然后將組合字符串傳遞給 STR_TO_DATE() 來(lái)獲得 DATETIME 值。雖然這聽(tīng)起來(lái)可能需要做很多工作,但實(shí)際上非常簡(jiǎn)單:

總結(jié)
在這一部分中,我們介紹了使用 MySQL 的一些專用日期和時(shí)間函數(shù)在 MySQL 中創(chuàng)建日期和時(shí)間的幾種方法。在下一部分中,我們將了解如何在 SELECT 查詢中使用時(shí)態(tài)數(shù)據(jù)。
推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
