首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 日期時間函數完整參考手冊

     編輯:MySQL 資料庫相關知識

MySQL 提供豐富的日期時間函數支援多樣化的資料處理需求。本文系統整理核心函數分類、語法與實用範例,供開發與查詢優化參考。

日期時間類型與格式

支援類型:DATE、TIME、DATETIME、TIMESTAMP、YEAR。有效格式請參考官方文件 7.3.6 節。

常用查詢範例:最近 30 天資料

SELECT * FROM table 
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

日期元件擷取函數

函數說明回傳範圍範例
DAYOFWEEK(date)星期索引(ODBC 標準)1=週日 ~ 7=週六DAYOFWEEK('1998-02-03') → 3
WEEKDAY(date)星期索引0=週一 ~ 6=週日WEEKDAY('1997-11-05') → 2
DAYOFMONTH(date)月份中的日期1 ~ 31DAYOFMONTH('1998-02-03') → 3
DAYOFYEAR(date)年份中的天數1 ~ 366DAYOFYEAR('1998-02-03') → 34
MONTH(date)月份1 ~ 12MONTH('1998-02-03') → 2
DAYNAME(date)星期名稱英文名DAYNAME('1998-02-05') → 'Thursday'
MONTHNAME(date)月份名稱英文名MONTHNAME('1998-02-05') → 'February'
QUARTER(date)季度1 ~ 4QUARTER('98-04-01') → 2
WEEK(date[,mode])年份中的週數0~53,mode 控制週起始日WEEK('1998-02-20',1) → 8
YEAR(date)年份1000 ~ 9999YEAR('98-02-03') → 1998
HOUR(time)小時0 ~ 23HOUR('10:05:03') → 10
MINUTE(time)分鐘0 ~ 59MINUTE('98-02-03 10:05:03') → 5
SECOND(time)秒數0 ~ 59SECOND('10:05:03') → 3

週期運算函數

函數說明範例
PERIOD_ADD(P,N)期間 P (YYMM/YYYYMM) 加 N 個月PERIOD_ADD(9801,2) → 199803
PERIOD_DIFF(P1,P2)兩期間月數差PERIOD_DIFF(9802,199703) → 11

日期加減運算

DATE_ADD/DATE_SUB、ADDDATE/SUBDATE(同義詞),MySQL 3.23+ 支援 +/- 運算子。

type 關鍵字expr 格式範例
SECONDSECONDSDATE_ADD('1997-12-31 23:59:59', INTERVAL 1 SECOND) → '1998-01-01 00:00:00'
MINUTEMINUTES—
HOURHOURS—
DAYDAYSDATE_ADD('1997-12-31 23:59:59', INTERVAL 1 DAY) → '1998-01-01 23:59:59'
MONTHMONTHS—
YEARYEARS—
MINUTE_SECOND"MINUTES:SECONDS"INTERVAL "1:1" MINUTE_SECOND
HOUR_MINUTE"HOURS:MINUTES"—
DAY_HOUR"DAYS HOURS"—
YEAR_MONTH"YEARS-MONTHS"—
HOUR_SECOND"HOURS:MINUTES:SECONDS"—
DAY_MINUTE"DAYS HOURS:MINUTES"—
DAY_SECOND"DAYS HOURS:MINUTES:SECONDS"DATE_SUB('1998-01-01 00:00:00', INTERVAL "11:1:1" DAY_SECOND) → '1997-12-30 22:58:59'

注意:expr 格式若過短,MySQL 假設省略左側高位單位。日期超出月份天數上限會自動調整(如 1/30 + 1 month → 2/28)。

日期轉換函數

函數說明範例
TO_DAYS(date)日期轉絕對天數(從 Year 0)TO_DAYS('1997-10-07') → 729669
FROM_DAYS(N)天數轉日期FROM_DAYS(729669) → '1997-10-07'
DATE_FORMAT(date,format)依格式字串輸出見下表修飾符
TIME_FORMAT(time,format)時間格式化僅支援時分秒修飾符
UNIX_TIMESTAMP([date])轉 Unix 時間戳UNIX_TIMESTAMP('1997-10-04 22:23:00') → 875996580
FROM_UNIXTIME(ts[,format])時間戳轉日期FROM_UNIXTIME(875996580) → '1997-10-04 22:23:00'
SEC_TO_TIME(sec)秒數轉 HH:MM:SSSEC_TO_TIME(2378) → '00:39:38'
TIME_TO_SEC(time)時間轉總秒數TIME_TO_SEC('22:23:00') → 80580

DATE_FORMAT 常用修飾符

修飾符意義修飾符意義
%Y4 位年份%y2 位年份
%M月份名稱%b縮寫月份名
%m月份 (01-12)%c月份 (1-12)
%d日期 (00-31)%e日期 (0-31)
%H小時 (00-23)%h/%I小時 (01-12)
%i分鐘 (00-59)%S/%s秒 (00-59)
%W星期名稱%a縮寫星期名
%r12 小時制時間%T24 小時制時間
%j年內天數 (001-366)%%字面 % 符號

目前日期時間函數

  • CURDATE() / CURRENT_DATE:YYYY-MM-DD
  • CURTIME() / CURRENT_TIME:HH:MM:SS
  • NOW() / SYSDATE() / CURRENT_TIMESTAMP:YYYY-MM-DD HH:MM:SS

善用這些函數能大幅簡化日期邏輯處理,提升查詢效能與程式碼可讀性。

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