mysql處理日期常用函數(shù)包括:1. 提取日期部分使用year()、month()、day()、date();2. 計(jì)算時(shí)間差用datediff()、timediff()、unix_timestamp();3. 格式化日期用date_format();4. 日期增減用date_add()、date_sub()。例如提取年月日分別返回2024、3、15,計(jì)算天數(shù)差返回5天,時(shí)間差返回02:15:00,格式化后可顯示為friday, march 15th, 2024,加減時(shí)間可靈活查詢(xún)最近30天訂單,這些函數(shù)組合能滿(mǎn)足大部分時(shí)間處理需求。
在mysql中處理日期時(shí),常用函數(shù)和操作能簡(jiǎn)化很多查詢(xún)邏輯。比如你可能需要提取某天的數(shù)據(jù)、計(jì)算兩個(gè)時(shí)間的間隔,或者格式化輸出結(jié)果,這些都能通過(guò)內(nèi)置的日期函數(shù)完成。
日期提取:從完整時(shí)間中獲取年、月、日等信息
MySQL提供了多個(gè)函數(shù)用于提取日期的不同部分。常用的有 YEAR()、MONTH()、DAY() 和 DATE() 等。
例如:
SELECT YEAR('2024-03-15') AS year; -- 返回 2024 SELECT MONTH('2024-03-15') AS month; -- 返回 3 SELECT DAY('2024-03-15') AS day; -- 返回 15
如果字段是 DATETIME 或 TIMESTAMP 類(lèi)型,也可以直接提取日期部分:
SELECT DATE(order_time) AS order_date FROM orders;
這在按天統(tǒng)計(jì)訂單數(shù)量時(shí)非常有用。
時(shí)間差計(jì)算:判斷兩個(gè)時(shí)間之間的間隔
當(dāng)你想計(jì)算兩個(gè)時(shí)間之間相差幾天或幾小時(shí),可以用 datediff() 和 TIMEDIFF() 函數(shù)。
-
DATEDIFF(date1, date2) 返回兩個(gè)日期之間的天數(shù)差:
SELECT DATEDIFF('2024-03-20', '2024-03-15') AS days_diff; -- 返回 5
-
TIMEDIFF(time1, time2) 返回兩個(gè)時(shí)間之間的時(shí)間差(以 HH:MM:SS 格式):
SELECT TIMEDIFF('14:30:00', '12:15:00') AS time_diff; -- 返回 02:15:00
如果你想精確到秒數(shù),可以結(jié)合 UNIX_TIMESTAMP() 使用:
SELECT UNIX_TIMESTAMP('2024-03-15 12:00:00') - UNIX_TIMESTAMP('2024-03-14 12:00:00') AS seconds_diff; -- 返回 86400 秒,即一天的秒數(shù)
日期格式化與轉(zhuǎn)換:讓時(shí)間顯示更符合需求
有時(shí)候默認(rèn)的日期格式不太友好,可以通過(guò) DATE_FORMAT() 自定義顯示格式。
語(yǔ)法如下:
SELECT DATE_FORMAT('2024-03-15', '%Y-%m-%d') AS formatted_date; -- 返回 2024-03-15 SELECT DATE_FORMAT('2024-03-15', '%W, %M %D, %Y') AS formatted_date; -- 返回 Friday, March 15th, 2024
常見(jiàn)格式符包括:
- %Y:四位數(shù)的年份
- %y:兩位數(shù)的年份
- %M:月份名稱(chēng)(如 March)
- %D:帶后綴的日期(如 15th)
- %H:小時(shí)(24小時(shí)制)
- %i:分鐘
- %S:秒
這個(gè)功能常用于報(bào)表展示或?qū)С鰯?shù)據(jù)時(shí)調(diào)整時(shí)間格式。
日期增減:動(dòng)態(tài)調(diào)整時(shí)間值
如果你需要查詢(xún)“最近一周的數(shù)據(jù)”或“下個(gè)月到期的記錄”,可以使用 DATE_ADD() 和 DATE_SUB() 來(lái)實(shí)現(xiàn)時(shí)間的加減。
示例:
-- 獲取當(dāng)前時(shí)間加7天 SELECT DATE_ADD(NOW(), INTERVAL 7 DAY) AS next_week; -- 獲取當(dāng)前時(shí)間減一個(gè)月 SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH) AS last_month;
也可以用在查詢(xún)條件中:
SELECT * FROM orders WHERE order_time >= DATE_SUB(NOW(), INTERVAL 30 DAY); -- 查詢(xún)最近30天內(nèi)的訂單
這種寫(xiě)法比手動(dòng)拼接時(shí)間字符串要靈活得多,也更容易維護(hù)。
基本上就這些,MySQL 的日期函數(shù)雖然不算特別多,但組合起來(lái)能覆蓋大部分實(shí)際場(chǎng)景。只要掌握幾個(gè)核心函數(shù),就能應(yīng)對(duì)日常開(kāi)發(fā)中的各種時(shí)間處理需求了。