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

MySQL 時間處理函數大全:日期運算與格式化實戰

     編輯:MySQL 綜合教學

MySQL 時間處理函數大全:日期運算與格式化實戰

資料庫查詢中頻繁需要對時間欄位進行加減運算、格式化輸出、範圍篩選。本文聚焦 MySQL 核心時間函數 DATE_ADD()、DATE_SUB()、DATE_FORMAT(),提供豐富實戰範例,並補充常用時間型別選擇建議。

一、日期加減運算:DATE_ADD() / DATE_SUB()

語法結構

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

unit 支援單位:SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR 等。

實戰範例

-- 查詢並顯示 start 時間及其翌日
SELECT START, DATE_ADD(START, INTERVAL 1 DAY) AS addStart 
FROM ts_tickey WHERE id='373';

-- 更新資料:將 start 時間往後推一天
UPDATE ts_tickey 
SET START = DATE_ADD(START, INTERVAL 1 DAY) 
WHERE id='373';

-- 減少一天(負數 INTERVAL)
SELECT DATE_ADD(NOW(), INTERVAL -1 DAY) AS yesterday;

-- 增加 1 個月、1 年、1 小時
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);
SELECT DATE_ADD(NOW(), INTERVAL 1 YEAR);
SELECT DATE_ADD(NOW(), INTERVAL 1 HOUR);

等效簡寫

-- 以下語法等效
DATE_ADD(date, INTERVAL 1 DAY)
date + INTERVAL 1 DAY
DATE_SUB(date, INTERVAL 1 DAY)
date - INTERVAL 1 DAY

二、日期格式化輸出:DATE_FORMAT()

語法

DATE_FORMAT(date, format)

常用格式符對照表

符號含義範例輸出
%Y四位數年份2024
%y兩位數年份24
%m月份 (01-12)01
%c月份 (1-12)1
%d日期 (01-31)05
%e日期 (1-31)5
%H小時 24制 (00-23)14
%h/%I小時 12制 (01-12)02
%i分鐘 (00-59)30
%s/%S秒 (00-59)45
%W星期名稱Monday
%a星期縮寫Mon

實戰範例

-- 標準日期格式
SELECT DATE_FORMAT(a.start, '%Y-%m-%d') AS start_date FROM orders;

-- 日期時間完整格式
SELECT DATE_FORMAT(a.start, '%Y-%m-%d %H:%i:%s') AS start_datetime FROM orders;

-- 僅時間部分
SELECT DATE_FORMAT(a.uploadDate, '%H:%i:%s') AS upload_time FROM docs;

-- 中文友好格式
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H時%i分') AS cn_format;

三、補充:其他高頻時間函數

函數用途範例
NOW()當前日期時間2024-01-15 14:30:45
CURDATE()當前日期2024-01-15
CURTIME()當前時間14:30:45
UNIX_TIMESTAMP()時間戳轉換1705300245
FROM_UNIXTIME()時間戳轉日期2024-01-15 14:30:45
DATEDIFF(d1,d2)日期差天數DATEDIFF('2024-01-15','2024-01-10')=5
TIMESTAMPDIFF(unit,d1,d2)精確時間差TIMESTAMPDIFF(HOUR, d1, d2)
LAST_DAY(date)該月最後一天2024-01-31
QUARTER(date)季度 (1-4)1
WEEK(date)週數3

四、時間型別選擇建議

型別儲存大小範圍適用場景
DATE3 bytes1000-01-01 ~ 9999-12-31純日期(生日、紀念日)
TIME3 bytes-838:59:59 ~ 838:59:59純時間(工時、時長)
DATETIME8 bytes1000-01-01 ~ 9999-12-31通用日期時間,無時區轉換
TIMESTAMP4 bytes1970-01-01 ~ 2038-01-19需時區感知、自動更新欄位
YEAR1 byte1901 ~ 2155僅需年份

核心建議:DATETIME 適用大多數業務;TIMESTAMP 適合跨時區應用且需自動維護 ON UPDATE CURRENT_TIMESTAMP;注意 TIMESTAMP 2038 年上限問題。

五、時區處理提示

-- 查看當前時區
SHOW VARIABLES LIKE '%time_zone%';

-- 會話級設定時區
SET time_zone = '+08:00';
SET time_zone = 'Asia/Taipei';

-- 轉換時區顯示
SELECT CONVERT_TZ(NOW(), '+00:00', '+08:00');

總結

MySQL 時間函數體系完善,DATE_ADD/SUB 處理運算,DATE_FORMAT 掌握輸出,配合正確的時間型別選擇,能解決 95% 以上的時間處理需求。建立統一的時間處理規範(如:存儲用 UTC、顯示用本地時區、格式化統一用 %Y-%m-%d %H:%i:%s),能有效避免時區混亂與格式不一致問題。

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