表字段 createtime 存 Unix 時間戳(整數秒),需查某一天的所有記錄。
SELECT * FROM tbl
WHERE DATE_FORMAT(FROM_UNIXTIME(createtime), '%Y-%m-%d') = '2014-01-02';
FROM_UNIXTIME(unix_timestamp, [format]):時間戳 → 日期時間值/字串。format 回傳 DATETIME;有 format 回傳格式化字串。DATE_FORMAT(date, format):日期值 → 指定格式字串。組合效果:時間戳 → DATETIME → 'YYYY-MM-DD' 字串 → 與目標日期字串比較。
| 符號 | 含義 | 範例 |
|---|---|---|
%Y | 4 位年份 | 2014 |
%m | 2 位月份 | 01 |
%d | 2 位日期 | 02 |
%H | 24 制小時 | 14 |
%i | 分鐘 | 30 |
%s | 秒 | 59 |
%W | 星期名 | Thursday |
%M | 月份名 | January |
上述寫法會全表掃描。最佳實踐:將查詢條件轉換為時間戳範圍,走索引:
SELECT * FROM tbl
WHERE createtime >= UNIX_TIMESTAMP('2014-01-02 00:00:00')
AND createtime < UNIX_TIMESTAMP('2014-01-03 00:00:00');
UNIX_TIMESTAMP('date') 將日期字串轉時間戳(秒)。[start, end) 精確覆蓋一天,利用 createtime 索引。-- 時間戳 → 格式化字串
SELECT FROM_UNIXTIME(createtime, '%Y-%m-%d %H:%i:%s') FROM tbl;
-- 當前時間戳
SELECT UNIX_TIMESTAMP();