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

MySQL 日期時間函數大全:提取、運算、格式化一網打盡

     編輯:MySQL 綜合教學

MySQL 日期時間函數大全

提取類函數

函數說明示例
DAYOFWEEK(date)星期幾 (1=周日...7=周六)DAYOFWEEK('1998-02-03') → 3
WEEKDAY(date)星期幾 (0=周一...6=周日)WEEKDAY('1997-10-04') → 5
DAYOFMONTH(date)月內天數 (1-31)DAYOFMONTH('1998-02-03') → 3
DAYOFYEAR(date)年內天數 (1-366)DAYOFYEAR('1998-02-03') → 34
MONTH(date)月份數值MONTH('1998-02-03') → 2
DAYNAME(date)英文星期名DAYNAME('1998-02-05') → 'Thursday'
MONTHNAME(date)英文月份名MONTHNAME('1998-02-05') → 'February'
QUARTER(date)季度 (1-4)QUARTER('98-04-01') → 2
WEEK(date,first)年內周數 (first=0 周日始, 1 周一始)WEEK('1998-02-20',1) → 8
YEAR(date)年份 (1000-9999)YEAR('98-02-03') → 1998
HOUR(time)小時 (0-23)HOUR('10:05:03') → 10
MINUTE(time)分鐘 (0-59)MINUTE('98-02-03 10:05:03') → 5
SECOND(time)秒 (0-59)SECOND('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

語法:DATE_ADD(date, INTERVAL expr type),type 關鍵字:

示例:

SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;  -- 1998-01-01 00:00:00
SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL 1 DAY);  -- 1998-01-01 23:59:59
SELECT DATE_ADD("1997-12-31 23:59:59", INTERVAL "1:1" MINUTE_SECOND);  -- 1998-01-01 00:01:00
SELECT DATE_SUB("1998-01-01 00:00:00", INTERVAL "1 1:1:1" DAY_SECOND);  -- 1997-12-30 22:58:59
SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);  -- 1997-12-30 14:00:00

提取組合:EXTRACT

SELECT EXTRACT(YEAR FROM "1999-07-02");  -- 1999
SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");  -- 199907
SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");  -- 20102

天數轉換

  • TO_DAYS(date):公元 0 年起天數(忽略 1582 前)。TO_DAYS('1997-10-07') → 729669
  • FROM_DAYS(N):天數轉日期。FROM_DAYS(729669) → '1997-10-07'

格式化輸出:DATE_FORMAT / TIME_FORMAT

常用格式符:

type含義expr 格式
SECOND/MINUTE/HOUR/DAY/MONTH/YEAR單位數值
MINUTE_SECOND分:秒"MIN:SEC"
HOUR_MINUTE時:分"HOUR:MIN"
DAY_HOUR天 時"DAY HOUR"
YEAR_MONTH年-月"YEAR-MONTH"
HOUR_SECOND時:分:秒"H:M:S"
DAY_MINUTE天 時:分"DAY H:M"
DAY_SECOND天 時:分:秒"DAY H:M:S"
SELECT DATE_FORMAT('1997-10-04 22:23:00','%W %M %Y');  -- 'Saturday October 1997'
SELECT DATE_FORMAT('1997-10-04 22:23:00','%H:%i:%s');  -- '22:23:00'

當前時間

  • NOW() / SYSDATE() / CURRENT_TIMESTAMP():日期時間
  • CURDATE() / CURRENT_DATE():日期
  • CURTIME() / CURRENT_TIME():時間

Unix 時間戳互轉

  • UNIX_TIMESTAMP() / UNIX_TIMESTAMP(date) → 秒數
  • FROM_UNIXTIME(ts) / FROM_UNIXTIME(ts, format) → 日期時間/格式化

秒↔時間

  • SEC_TO_TIME(sec) → 'HH:MM:SS'
  • TIME_TO_SEC(time) → 總秒數

收藏建議

將此表存為代碼片段,業務開發中直接複製適配,避免手寫拼接 SQL 導致時區/格式 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
符號含義
%Y4位年
%m2位月(01-12)
%d2位日(01-31)
%H24制時(00-23)
%i分(00-59)
%s秒(00-59)
%W星期全名
%M月份全名
%r12制時間(hh:mm:ss AM/PM)
%T24制時間(hh:mm:ss)