首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 日期時間函數大全:分類速查與實戰範例

     編輯:MySQL 綜合教學

MySQL 日期時間函數完整分類參考:從基礎提取到複雜運算

日期時間處理是業務開發高頻領域。本文將 MySQL 內建日期時間函數按功能分類(提取、格式化、運算、轉換、系統時間),提供語法、參數、返回值、實戰範例與版本差異,構建開發隨查隨用的速查手冊。

一、日期時間組件提取函數

函數功能返回值範圍/示例
YEAR(date)年份1000-9999, 如 2024
QUARTER(date)季度1-4
MONTH(date)月份1-12
WEEK(date[,mode])年間第幾周0-53, mode 控制周起始日
WEEKDAY(date)周幾 (0=週一)0-6
DAYOFWEEK(date)周幾 (1=週日)1-7 (ODBC 標準)
DAYOFMONTH(date)月內第幾天1-31
DAYOFYEAR(date)年內第幾天1-366
DAYNAME(date)星期英文名'Monday'...
MONTHNAME(date)月份英文名'January'...
HOUR(time)小時0-23
MINUTE(time)分鐘0-59
SECOND(time)秒0-59
MICROSECOND(datetime)微秒 (5.6+)0-999999

二、日期時間格式化輸出

DATE_FORMAT(date, format) / TIME_FORMAT(time, format)

格式符含義示例
%Y4位年份2024
%y2位年份24
%m月份(01-12)01
%c月份(1-12)1
%d日期(01-31)05
%e日期(1-31)5
%H小時(00-23)14
%h/%I小時(01-12)02
%i分鐘(00-59)30
%s/%S秒(00-59)45
%T時間 24制14:30:45
%r時間 12制02:30:45 PM
%W完整星期名Monday
%a縮寫星期名Mon
%M完整月份名January
%b縮寫月份名Jan
%j年內天數(001-366)035
%pAM/PMPM
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');  -- 2024-01-15 14:30:45
SELECT DATE_FORMAT('2024-01-15', '%W, %M %D, %Y'); -- Monday, January 15th, 2024

三、日期時間運算:加減間隔

DATE_ADD(date, INTERVAL expr unit) / DATE_SUB(date, INTERVAL expr unit)

單位關鍵字expr 格式示例
秒SECONDSECONDSINTERVAL 30 SECOND
分MINUTEMINUTESINTERVAL 45 MINUTE
時HOURHOURSINTERVAL 2 HOUR
天DAYDAYSINTERVAL 7 DAY
月MONTHMONTHSINTERVAL 3 MONTH
年YEARYEARSINTERVAL 1 YEAR
分:秒MINUTE_SECOND"MIN:SEC"INTERVAL '30:15' MINUTE_SECOND
時:分HOUR_MINUTE"HOUR:MIN"INTERVAL '2:30' HOUR_MINUTE
天 時DAY_HOUR"DAY HOUR"INTERVAL '3 5' DAY_HOUR
年-月YEAR_MONTH"YEAR-MONTH"INTERVAL '1-6' YEAR_MONTH
時:分:秒HOUR_SECOND"H:M:S"INTERVAL '1:30:45' HOUR_SECOND
天 時:分DAY_MINUTE"DAY H:M"INTERVAL '2 12:30' DAY_MINUTE
天 時:分:秒DAY_SECOND"DAY H:M:S"INTERVAL '1 10:20:30' DAY_SECOND
SELECT DATE_ADD('2024-01-15', INTERVAL 1 MONTH);      -- 2024-02-15
SELECT DATE_SUB(NOW(), INTERVAL '1 12:30' DAY_HOUR);  -- 1.5天前
SELECT '2024-01-15' + INTERVAL 1 DAY;                 -- 運算符簡寫 (5.6+)
SELECT DATE_ADD('2024-01-31', INTERVAL 1 MONTH);      -- 2024-02-29 (閏年自動調整)

四、時間戳與 Unix 時間轉換

函數功能示例
UNIX_TIMESTAMP([date])轉 Unix 時間戳 (秒)1705312245
FROM_UNIXTIME(unix_ts[,format])時間戳轉日期時間'2024-01-15 14:30:45'
UTC_TIMESTAMP()當前 UTC 時間'2024-01-15 06:30:45'
CONVERT_TZ(dt, from_tz, to_tz)時區轉換CONVERT_TZ(NOW(), '+00:00', '+08:00')

五、系統時間獲取

函數返回類型示例差異
NOW()DATETIME'2024-01-15 14:30:45'語句開始時刻固定
SYSDATE()DATETIME'2024-01-15 14:30:46'實時執行時刻,受 sysdate_is_now 影響
CURDATE()DATE'2024-01-15'僅日期
CURTIME()TIME'14:30:45'僅時間
CURRENT_TIMESTAMP()DATETIME同 NOW()標準 SQL 別名

六、周期運算:PERIOD_ADD / PERIOD_DIFF

-- 單位:月,格式 YYYYMM 或 YYMM
SELECT PERIOD_ADD(202401, 3);    -- 202404
SELECT PERIOD_DIFF(202406, 202401); -- 5 (相差 5 個月)

七、天數與日期互轉:TO_DAYS / FROM_DAYS

SELECT TO_DAYS('2024-01-15');      -- 738532 (從 0000-01-01 起算)
SELECT FROM_DAYS(738532);          -- '2024-01-15'
-- 注意:不支援 1582 年前格里高利曆改革前日期

八、秒數與時間互轉:TIME_TO_SEC / SEC_TO_TIME

SELECT TIME_TO_SEC('14:30:45');    -- 52245
SELECT SEC_TO_TIME(52245);         -- '14:30:45'

九、提取複合組件:EXTRACT(unit FROM date)

SELECT EXTRACT(YEAR_MONTH FROM '2024-01-15 14:30:45'); -- 202401
SELECT EXTRACT(DAY_HOUR FROM '2024-01-15 14:30:45');   -- 1514
SELECT EXTRACT(MINUTE_SECOND FROM '2024-01-15 14:30:45'); -- 3045

十、字串解析為日期:STR_TO_DATE(str, format)

SELECT STR_TO_DATE('15/01/2024 14:30', '%d/%m/%Y %H:%i'); -- '2024-01-15 14:30:00'
-- 反向操作:DATE_FORMAT

十一、實戰常用組合模式

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved