核心查詢:指定日期篩選
SELECT *
FROM `table_name`
WHERE DATE_FORMAT(FROM_UNIXTIME(`create_time`), '%Y-%m-%d') = '2024-01-15';
函數詳解
| 函數 | 語法 | 說明 |
FROM_UNIXTIME | FROM_UNIXTIME(unix_ts[, format]) | Unix 時間戳 (秒) → DATETIME / 格式化字串 |
DATE_FORMAT | DATE_FORMAT(dt, format) | 日期時間 → 指定格式字串 |
UNIX_TIMESTAMP | UNIX_TIMESTAMP([dt]) | 日期時間 → Unix 時間戳 (秒) |
常用格式化符號
| 符號 | 含義 | 範例輸出 |
%Y | 4 位年份 | 2024 |
%m | 2 位月份 | 01 |
%d | 2 位日期 | 15 |
%H | 24 制小時 | 14 |
%i | 分鐘 | 05 |
%s | 秒 | 09 |
%W | 星期名稱 | Monday |
%M | 月份名稱 | January |
效能優化:避免函數包裹欄位導致索引失效
-- ❌ 慢:函數在欄位上,無法用索引
WHERE DATE_FORMAT(FROM_UNIXTIME(create_time), '%Y-%m-%d') = '2024-01-15'
-- ✅ 快:將條件轉為時間戳範圍,走索引
WHERE create_time >= UNIX_TIMESTAMP('2024-01-15 00:00:00')
AND create_time < UNIX_TIMESTAMP('2024-01-16 00:00:00')
原則:WHERE 條件盡量保持「欄位 運算子 常數」,讓優化器使用索引範圍掃描。
時區陷阱
FROM_UNIXTIME 受 time_zone 系統變數影響 (預設 SYSTEM)。
- 應用層建議統一儲存 UTC 時間戳,查詢時在應用層轉換目標時區,或 SQL 中
CONVERT_TZ。