依 format 字串格式化 DATE、DATETIME、TIMESTAMP 值,返回字串。
| 符號 | 含義 | 範例輸出 |
|---|---|---|
%S, %s | 秒 (00-59) | 05 |
%i | 分 (00-59) | 30 |
%H | 時 24制 (00-23) | 14 |
%h, %I | 時 12制 (01-12) | 02 |
%k | 時 24制 (0-23) | 14 |
%l | 時 12制 (1-12) | 2 |
%T | 時間 24制 (HH:MM:SS) | 14:30:05 |
%r | 時間 12制 (hh:mm:ss AM/PM) | 02:30:05 PM |
%p | AM/PM | PM |
%W | 星期全名 | Sunday |
%a | 星期縮寫 | Sun |
%d | 月內天數 (00-31) | 05 |
%e | 月內天數 (0-31) | 5 |
%D | 帶英文後綴天數 | 5th |
%w | 週內天數 (0=Sunday) | 0 |
%j | 年內天數 (001-366) | 035 |
%U | 週數 (00-53, Sunday 首日) | 05 |
%u | 週數 (00-53, Monday 首日) | 05 |
%M | 月份全名 | January |
%b | 月份縮寫 | Jan |
%m | 月份 (01-12) | 01 |
%c | 月份 (1-12) | 1 |
%Y | 四位年份 | 2024 |
%y | 兩位年份 | 24 |
%% | 字面 % | % |
-- 標準日期時間
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 2024-01-15 14:30:05
-- 中文友好
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i'); -- 2024年01月15日 14:30
-- 只取日期
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS create_date FROM orders;
-- 只取月份 (用於分組統計)
SELECT DATE_FORMAT(create_time, '%Y-%m') AS month, COUNT(*) FROM orders GROUP BY month;
-- 週報標題
SELECT CONCAT('Week ', DATE_FORMAT(NOW(), '%X-%V')); -- Week 2024-03
SELECT STR_TO_DATE('2024-01-15 14:30:05', '%Y-%m-%d %H:%i:%s');
-- 字串轉 DATETIME,格式符號同 DATE_FORMAT
DATE_FORMAT 在 WHERE 條件中會導致**索引失效** (無法使用索引範圍掃描)WHERE DATE_FORMAT(created_at, '%Y-%m') = '2024-01'WHERE created_at >= '2024-01-01' AND created_at < '2024-02-01'DATE_FORMAT 使用會話時區 (@@session.time_zone)。跨時區應用建議統一儲存 UTC,顯示時在應用層轉換或 CONVERT_TZ()。
**收藏此表,寫日期格式化不再查手冊。**