MySQL 日期時間函數極其豐富,本文系統整理 6 大類 50+ 函數,附參數說明與實戰範例,建議收藏為開發速查表。
| 函數 | 返回 | 差異 |
|---|---|---|
NOW() | DATETIME | 語句開始執行時固定值 |
SYSDATE() | DATETIME | 函數執行瞬間動態值 |
CURDATE() | DATE | 當前日期 |
CURTIME() | TIME | 當前時間 |
UTC_DATE/TIME/TIMESTAMP() | UTC 時間 | 跨時區應用必備 |
SET @dt = '2008-09-10 07:15:30.123456'; DATE(@dt) -- 2008-09-10 TIME(@dt) -- 07:15:30.123456 YEAR(@dt) -- 2008 QUARTER(@dt) -- 3 MONTH(@dt) -- 9 WEEK(@dt) -- 36 DAY(@dt) -- 10 HOUR(@dt) -- 7 MINUTE(@dt) -- 15 SECOND(@dt) -- 30 MICROSECOND(@dt) -- 123456
DAYOFWEEK(@dt) -- 1=Sun...7=Sat WEEKDAY(@dt) -- 0=Mon...6=Sun DAYOFYEAR(@dt) -- 年內第幾天 WEEK(@dt, mode) -- mode 0-7 控制週起始日 YEARWEEK(@dt) -- 200831
LAST_DAY('2008-02-01') -- 2008-02-29 (閏年)
LAST_DAY('2008-08-08') -- 2008-08-31
-- 取當月天數
DAY(LAST_DAY(NOW()))
MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR YEAR_MONTH
DATEDIFF('2008-08-08','2008-08-01') -- 7
TIMEDIFF('08:08:08','00:00:00') -- 08:08:08
STR_TO_DATE('08/09/2008','%m/%d/%Y') -- 2008-08-09
STR_TO_DATE('08.09.2008 08:09:30','%m.%d.%Y %h:%i:%s')
DATE_FORMAT('2008-08-08 22:23:00','%W %M %Y') -- Friday August 2008
DATE_FORMAT('2008-08-08 22:23:01','%Y%m%d%H%i%s') -- 20080808222301
TIME_FORMAT('22:23:01','%H.%i.%s') -- 22.23.01
%Y 4位年 %y 2位年 %m 月 %d 日 %H 24時 %h 12時 %i 分 %s 秒 %f 微秒 %W 週名 %M 月名 %p AM/PM %j 年內天數 %w 週內天(0=Sun)
GET_FORMAT(DATE,'USA') -- '%m.%d.%Y' GET_FORMAT(DATETIME,'ISO') -- '%Y-%m-%d %H:%i:%s' GET_FORMAT(TIME,'EUR') -- '%H.%i.%s'
MAKEDATE(2001,31) -- 2001-01-31 MAKETIME(12,15,30) -- 12:15:30
UNIX_TIMESTAMP() -- 當前 Unix 時間戳
UNIX_TIMESTAMP('2008-08-08') -- 1218124800
FROM_UNIXTIME(1218124800) -- '2008-08-08 00:00:00'
FROM_UNIXTIME(ts, fmt) -- 格式化輸出
TIMESTAMP(date) -- DATE→DATETIME
TIMESTAMP(dt, time) -- 相加
TIMESTAMPADD(unit, n, dt) -- 同 DATE_ADD
TIMESTAMPDIFF(unit, dt1, dt2) -- 差值,單位靈活(比 DATEDIFF 強)
CONVERT_TZ('2008-08-08 12:00:00','+08:00','+00:00') -- 2008-08-08 04:00:00
-- 等效
DATE_ADD(dt, INTERVAL -8 HOUR)
TIMESTAMPADD(HOUR, -8, dt)
核心函數組合:NOW/SYSDATE 取值 → DATE/EXTRACT 拆解 → DATE_ADD/SUB 運算 → DATE_FORMAT/STR_TO_DATE 轉換 → UNIX_TIMESTAMP/FROM_UNIXTIME 時間戳互轉 → CONVERT_TZ 時區。掌握這條鏈路,日期時間處理無懼任何需求。