格式化輸出:DATE_FORMAT / TIME_FORMAT
DATE_FORMAT(date, format)
TIME_FORMAT(time, format) -- 僅支援時分秒符號
常用格式符號 (完整表見正文)
| 符號 | 含義 | 範例 |
| %Y | 4 位年份 | 1997 |
| %m | 月份 01-12 | 10 |
| %d | 日期 01-31 | 04 |
| %H | 24 制小時 00-23 | 22 |
| %i | 分鐘 00-59 | 23 |
| %s | 秒 00-59 | 00 |
| %W | 星期全名 | Saturday |
| %M | 月份全名 | October |
| %D | 帶序數詞綴日期 | 4th |
| %r | 12 制時間 | 10:23:00 PM |
| %T | 24 制時間 | 22:23:00 |
| %% | 字面 % | % |
範例
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); -- Saturday October 1997
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); -- 22:23:00
SELECT DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j'); -- 4th 97 Sat 04 10 Oct 277
當前時間取得
| 函數 | 回傳格式 (字串/數值) | 範例 |
| CURDATE() / CURRENT_DATE | 'YYYY-MM-DD' / YYYYMMDD | '1997-12-15' / 19971215 |
| CURTIME() / CURRENT_TIME | 'HH:MM:SS' / HHMMSS | '23:50:26' / 235026 |
| NOW() / SYSDATE() / CURRENT_TIMESTAMP | 'YYYY-MM-DD HH:MM:SS' / YYYYMMDDHHMMSS | '1997-12-15 23:50:26' / 19971215235026 |
Unix 時間戳互轉
UNIX_TIMESTAMP() -- 當前秒數 (從 1970-01-01 UTC)
UNIX_TIMESTAMP('1997-10-04 22:23:00') -- 指定時間秒數 → 875996580
FROM_UNIXTIME(875996580) -- '1997-10-04 22:23:00'
FROM_UNIXTIME(875996580, '%Y %D %M %h:%i:%s %x') -- 1997 4th October 10:23:00 x
若欄位為 `TIMESTAMP` 型別,`UNIX_TIMESTAMP` 直接讀取內部值,無隱性轉換開銷。
秒與時間互轉
SEC_TO_TIME(2378) -- '00:39:38' / 3938
TIME_TO_SEC('22:23:00') -- 80580
TIME_TO_SEC('00:39:38') -- 2378
實戰小技巧
- 儲存 UTC 時間戳 (BIGINT/INT),顯示層用 `FROM_UNIXTIME` 配合使用者時區格式化
- 避免在 `WHERE` 條件對日期欄位使用函數 (如 `DATE(created_at) = ...`),導致索引失效;改用範圍查詢 `created_at >= '2023-01-01' AND created_at < '2023-01-02'`
- MySQL 8.0+ 支援 `DATE_FORMAT` 的 `locale` 參數,可直接輸出中文星期/月份