假設表中有 time 欄位(Unix timestamp),需統計每日記錄數。
SELECT CONVERT(CHAR(10), time, 120) AS day, COUNT(*) FROM table_name GROUP BY CONVERT(CHAR(10), time, 120);
120:ODBC 標準格式 YYYY-MM-DD HH:MI:SSCHAR(10):取前 10 字元 YYYY-MM-DD,自動去除時分秒CONVERT(CHAR(7), time, 120) → YYYY-MMCONVERT(CHAR(4), time, 120) → YYYY更靈活、可讀性更強,支援豐富格式化符號:
| 符號 | 含義 | 範例 |
|---|---|---|
| %Y | 4 位數年份 | 2024 |
| %m | 2 位數月份 | 01-12 |
| %d | 2 位數日期 | 01-31 |
| %H | 24 小時制 | 00-23 |
| %i | 分鐘 | 00-59 |
| %s | 秒數 | 00-59 |
| %W | 星期名稱 | Sunday |
| %U | 週數 (週日為第一天) | 00-52 |
| %u | 週數 (週一為第一天) | 00-52 |
-- 按天分組 SELECT DATE_FORMAT(FROM_UNIXTIME(time), '%Y-%m-%d') AS day, COUNT(*) FROM table_name GROUP BY day; -- 按月分組 SELECT DATE_FORMAT(FROM_UNIXTIME(time), '%Y-%m') AS month, COUNT(*) FROM table_name GROUP BY month; -- 按自然週分組 (年週格式: 202401) SELECT CONCAT(DATE_FORMAT(FROM_UNIXTIME(time), '%Y'), DATE_FORMAT(FROM_UNIXTIME(time), '%u')) AS year_week, COUNT(*) FROM table_name GROUP BY year_week; -- 按小時分組 SELECT DATE_FORMAT(FROM_UNIXTIME(time), '%Y-%m-%d %H') AS hour, COUNT(*) FROM table_name GROUP BY hour;
若欄位已為 DATETIME 或 TIMESTAMP 型別,無需 FROM_UNIXTIME 轉換:
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS day, COUNT(*) FROM orders GROUP BY day;