MySQL 獲取指定日期前 N 天日期:DATE_SUB 函數用法詳解
核心語法
DATE_SUB(date, INTERVAL expr unit)
date:起始日期(字串、日期列、NOW() 等)
expr:間隔數值
unit:單位(DAY、WEEK、MONTH、YEAR、HOUR、MINUTE、SECOND 等)
實戰示例
1. 獲取 2015-03-01 前 7 天
SELECT DATE_SUB('2015-03-01', INTERVAL 7 DAY);
-- 結果:2015-02-22
2. 獲取當前日期前 30 天
SELECT DATE_SUB(CURDATE(), INTERVAL 30 DAY);
3. 獲取當前時間前 2 小時
SELECT DATE_SUB(NOW(), INTERVAL 2 HOUR);
4. WHERE 條件中使用:查詢最近 7 天訂單
SELECT * FROM orders
WHERE create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY);
相關函數對比
| 函數 | 用途 | 示例 |
DATE_SUB | 日期減去間隔 | DATE_SUB('2024-01-10', INTERVAL 5 DAY) → 2024-01-05 |
DATE_ADD | 日期加上間隔 | DATE_ADD('2024-01-10', INTERVAL 5 DAY) → 2024-01-15 |
SUBDATE | DATE_SUB 別名 | SUBDATE('2024-01-10', 5) → 2024-01-05 |
ADDDATE | DATE_ADD 別名 | ADDDATE('2024-01-10', 5) → 2024-01-15 |
DATEDIFF | 兩日期相差天數 | DATEDIFF('2024-01-15', '2024-01-10') → 5 |
注意事項
INTERVAL 關鍵字不可省略
- 單位關鍵字不區分大小寫:
DAY = day
- 跨月/跨年自動處理:
DATE_SUB('2024-03-01', INTERVAL 1 DAY) → 2024-02-29(閏年)
- 搭配索引使用:
WHERE create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY) 可命中 create_time 索引