MySQL 儲存時間常用 INT(11) 存 Unix Timestamp,或 DATETIME/TIMESTAMP 型別。本文彙整 FROM_UNIXTIME、UNIX_TIMESTAMP、DATE_FORMAT 等核心函數,含格式化符號完整對照表與常用查詢範例。
核心互轉函數
| 函數 | 用途 | 範例 |
FROM_UNIXTIME(ts, format) | Timestamp → 格式化字串 | FROM_UNIXTIME(1234567890, '%Y-%m-%d %H:%i:%s') |
UNIX_TIMESTAMP(dt) | 日期時間 → Timestamp | UNIX_TIMESTAMP('2024-01-01 00:00:00') |
DATE_FORMAT(dt, format) | 日期時間 → 指定格式字串 | DATE_FORMAT(NOW(), '%Y-%m-%d') |
格式化符號完整對照表
| 符號 | 意義 | 範例 |
%Y | 4 位數年份 | 2024 |
%y | 2 位數年份 | 24 |
%m | 月份 (01-12) | 01 |
%c | 月份 (1-12) | 1 |
%d | 日期 (01-31) | 01 |
%e | 日期 (1-31) | 1 |
%H | 小時 24制 (00-23) | 13 |
%h | 小時 12制 (01-12) | 01 |
%i | 分鐘 (00-59) | 05 |
%s | 秒數 (00-59) | 09 |
%W | 星期名稱 | Monday |
%a | 星期縮寫 | Mon |
%M | 月份名稱 | January |
%b | 月份縮寫 | Jan |
%r | 12制時間 (hh:mm:ss AM/PM) | 01:05:09 PM |
%T | 24制時間 (hh:mm:ss) | 13:05:09 |
%% | 字面 % 符號 | % |
常用查詢範例
1. 近 30 天資料
SELECT * FROM tbl_name
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30
2. 日期運算函數
| 函數 | 說明 | 範例結果 |
DAYOFWEEK(date) | 星期索引 (1=Sun, 7=Sat) | 3 |
WEEKDAY(date) | 星期索引 (0=Mon, 6=Sun) | 1 |
DAYOFMONTH(date) | 月份第幾天 (1-31) | 3 |
DAYOFYEAR(date) | 年度第幾天 (1-366) | 34 |
MONTH(date) | 月份 (1-12) | 2 |
DAYNAME(date) | 星期名稱 | Thursday |
MONTHNAME(date) | 月份名稱 | February |
QUARTER(date) | 季度 (1-4) | 2 |
WEEK(date) | 年度第幾週 | 5 |
3. Excel 公式換算(參考)
=(UnixTimestamp + 8*3600) / 86400 + 70*365 + 19
-- 8*3600 為 UTC+8 時區修正
實務提醒
- MySQL
TIMESTAMP 型別範圍:1970-2038,DATETIME:1000-9999
FROM_UNIXTIME 回傳值受 time_zone 系統變數影響
- 儲存為
INT 時,查詢前先轉換再比較,避免隱含轉換導致索引失效