DATE_FORMAT(date, format) 將日期/時間按指定格式輸出字符串,常用於報表展示、分組統計、ETL 轉換。
| 符號 | 含義 | 示例 |
|---|---|---|
| %Y | 4位年份 | 2023 |
| %y | 2位年份 | 23 |
| %m | 月份(01-12) | 07 |
| %c | 月份(1-12) | 7 |
| %d | 日期(01-31) | 05 |
| %e | 日期(1-31) | 5 |
| %H | 小時(00-23) | 14 |
| %h/%I | 小時(01-12) | 02 |
| %i | 分鐘(00-59) | 30 |
| %s/%S | 秒(00-59) | 45 |
| %T | 時間 24h (HH:MM:SS) | 14:30:45 |
| %r | 時間 12h (hh:mm:ss AM/PM) | 02:30:45 PM |
| %W | 星期名 | Wednesday |
| %a | 縮寫星期名 | Wed |
| %M | 月份名 | July |
| %b | 縮寫月份名 | Jul |
| %j | 一年中的天(001-366) | 186 |
| %U | 週數(00-53) 週日為首 | 26 |
| %u | 週數(00-53) 週一為首 | 27 |
| %f | 微秒(000000-999999) | 123456 |
SELECT DATE_FORMAT(NOW(), '%b %d %Y %h:%i %p'); -- Jul 05 2023 02:30 PM SELECT DATE_FORMAT(NOW(), '%m-%d-%Y'); -- 07-05-2023 SELECT DATE_FORMAT(NOW(), '%d %b %y'); -- 05 Jul 23 SELECT DATE_FORMAT(NOW(), '%d %b %Y %T:%f'); -- 05 Jul 2023 14:30:45:123456
SELECT
DATE_FORMAT(`order_create_time`, '%u') AS week,
SUM(`total_amount`) AS money
FROM `corder`
WHERE DATE_FORMAT(`order_create_time`, '%Y') = '2012'
GROUP BY week
ORDER BY week;
結果:
week money 13 854314.83 14 5177385.26 15 4870063.87 ...
DATE_FORMAT 返回字符串,不可直接用於索引範圍掃描;WHERE 子句建議用 date_col >= '2023-01-01' AND date_col < '2023-02-01'。NOW() 受 time_zone 影響,存儲建議用 UTC,展示層轉換。DATE_FORMAT 配合 CTE 做複雜周期報表。