| 函數 | 返回值 | 示例 |
| DAYOFWEEK(d) | 1=週日 ... 7=週六 | DAYOFWEEK('2023-01-01') → 1 |
| WEEKDAY(d) | 0=週一 ... 6=週日 | WEEKDAY('2023-01-01') → 6 |
| DAYOFMONTH(d) | 1~31 | DAYOFMONTH('2023-01-15') → 15 |
| DAYOFYEAR(d) | 1~366 | DAYOFYEAR('2023-02-01') → 32 |
| MONTH(d) | 1~12 | MONTH('2023-05-01') → 5 |
| DAYNAME(d) | 英文星期名 | DAYNAME('2023-01-01') → 'Sunday' |
| MONTHNAME(d) | 英文月份名 | MONTHNAME('2023-05-01') → 'May' |
| QUARTER(d) | 1~4 | QUARTER('2023-04-01') → 2 |
| WEEK(d[,mode]) | 週數,mode=0 週日起算,1 週一 | WEEK('2023-01-01',1) → 52 |
| YEAR(d) | 年份 | YEAR('2023-01-01') → 2023 |
| HOUR(t) | 0~23 | HOUR('14:30:00') → 14 |
| MINUTE(t) | 0~59 | MINUTE('14:30:00') → 30 |
| SECOND(t) | 0~59 | SECOND('14:30:00') → 0 |
日期運算
DATE_ADD(d, INTERVAL expr unit) / DATE_SUB(...):加減間隔。
ADDDATE/SUBDATE 為同義詞。
- 單位:MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR 等。
- 範例:
DATE_ADD('2023-01-01', INTERVAL 1 MONTH) → '2023-02-01'。
周期運算(YYYYMM 格式)
PERIOD_ADD(202301, 2) → 202303。
PERIOD_DIFF(202303, 202212) → 3(月數差)。
相對時間查詢常用模式
-- 最近 30 天
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30
-- 本月
WHERE YEAR(date_col)=YEAR(NOW()) AND MONTH(date_col)=MONTH(NOW())
-- 避免函數列導致索引失效,改用範圍:
WHERE date_col >= DATE_SUB(NOW(), INTERVAL 30 DAY)
提示
- 盡量不要在列上使用函數(如
YEAR(date_col)),導致索引失效,改用常數範圍查詢。
TIMESTAMP 受 2038 年限制,長期項目優先用 DATETIME。
- 上一篇文章: MySQL 5.x 權限管理詳解:GRANT 與 REVOKE 語法、權限層級、最佳實踐與注意事項
- 下一篇文章: MySQL 數據庫備份與還原核心命令:mysqldump 導出與 source 導入實操指南
Copyright ©
程式碼之家 All Rights Reserved