常用日期時間函數速查表
| 函數 | 說明 | 範例 | 結果 |
| DAYOFWEEK(date) | 星期幾(1=週日 ... 7=週六,ODBC 標準) | DAYOFWEEK('1998-02-03') | 3 |
| WEEKDAY(date) | 星期幾(0=週一 ... 6=週日) | WEEKDAY('1997-10-04 22:23:00') | 5 |
| DAYOFMONTH(date) | 月份中的第幾天(1-31) | DAYOFMONTH('1998-02-03') | 3 |
| DAYOFYEAR(date) | 年份中的第幾天(1-366) | DAYOFYEAR('1998-02-03') | 34 |
| MONTH(date) | 月份數值(1-12) | 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-03', 0) | 5 |
進階應用提示
- 日期運算:搭配
DATE_ADD()、DATE_SUB()、DATEDIFF() 進行加減運算。
- 格式化輸出:使用
DATE_FORMAT(date, format) 自訂顯示格式。
- 時區處理:
CONVERT_TZ() 在不同時區間轉換。
- 效能注意:避免在 WHERE 條件對欄位使用函數(如
WHERE DATE(created_at) = '2024-01-01'),會導致索引失效;改用範圍查詢 created_at >= '2024-01-01' AND created_at < '2024-01-02'。
常見場景範例
-- 取得本週一 00:00:00
SELECT DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY);
-- 取得上個月第一天
SELECT DATE_SUB(DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE())-1 DAY), INTERVAL 1 MONTH);
-- 年齡計算
SELECT FLOOR(DATEDIFF(CURDATE(), birth_date)/365.25) AS age FROM users;