萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL DATE_ADD 與 DATE_SUB 日期運算完整指南

語法


DATE_ADD(date, INTERVAL expr unit)
DATE_SUB(date, INTERVAL expr unit)
-- date: DATE/DATETIME/TIMESTAMP 起始值
-- expr: 間隔值(可為負數,單一單位時)
-- unit: 單位關鍵字(不分大小寫)

支援的單位

單位含義expr 格式
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年-月'年-月'

復合單位用法(需引號、分隔符任意非數字)


SELECT DATE_ADD('2024-01-18', INTERVAL '1 2' YEAR_MONTH);  -- 2025-03-18
SELECT DATE_ADD('2024-01-18', INTERVAL '1-2' YEAR_MONTH);  -- 2025-03-18
SELECT DATE_ADD('2024-01-18', INTERVAL '1,2' YEAR_MONTH);  -- 2025-03-18
-- 單一數值視為最小單位(月)
SELECT DATE_ADD('2024-01-18', INTERVAL 1 YEAR_MONTH);     -- 2024-02-18
-- 負數僅支援單一單位
SELECT DATE_ADD('2024-01-18', INTERVAL -1 YEAR_MONTH);    -- 2023-12-18

實用範例


-- 30 天前
SELECT DATE_SUB(NOW(), INTERVAL 30 DAY);

-- 本月第一天 00:00:00
SELECT DATE_FORMAT(NOW(), '%Y-%m-01 00:00:00');
-- 或
SELECT DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)), INTERVAL 1 DAY);

-- 下個月同一天(處理月底邊界)
SELECT DATE_ADD('2024-01-31', INTERVAL 1 MONTH);  -- 2024-02-29 (閏年) / 2024-02-28

-- 精確到毫秒
SELECT DATE_ADD(NOW(), INTERVAL '1.500' SECOND_MICROSECOND);

效能提示

  • 索引欄位上使用函數(WHERE DATE_ADD(created, INTERVAL 1 DAY) > NOW())會導致索引失效,改寫為 WHERE created > DATE_SUB(NOW(), INTERVAL 1 DAY)。
  • 大批次更新時間欄位時,分批提交,避免長事務。
copyright © 萬盛學電腦網 all rights reserved