萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 時間戳與日期互轉:UNIX_TIMESTAMP / FROM_UNIXTIME 完整用法

核心函數對照

函數方向說明
UNIX_TIMESTAMP()日期 → 時間戳無參數返回當前秒數;有參數轉換指定日期
FROM_UNIXTIME()時間戳 → 日期預設格式 'YYYY-MM-DD HH:MM:SS';可指定格式

UNIX_TIMESTAMP() 詳解

-- 當前時間戳
SELECT UNIX_TIMESTAMP();
-- 882226357

-- 指定日期轉換 (支援多種格式)
SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00');
-- 875996580

SELECT UNIX_TIMESTAMP('2024-01-15');
SELECT UNIX_TIMESTAMP(20240115103000);  -- 數字格式 YYYYMMDDHHMMSS

-- 作用於 TIMESTAMP 欄位時直接取值,無隱式轉換
SELECT UNIX_TIMESTAMP(ts_col) FROM tbl;

FROM_UNIXTIME() 詳解

-- 預設格式
SELECT FROM_UNIXTIME(875996580);
-- '1997-10-04 22:23:00'

-- 數字格式輸出
SELECT FROM_UNIXTIME(875996580) + 0;
-- 19971004222300

-- 自定義格式 (同 DATE_FORMAT 修飾符)
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
-- '2024 15th January 10:30:00 x'

-- 常用格式範例
SELECT FROM_UNIXTIME(ts_col, '%Y-%m-%d %H:%i:%s') FROM tbl;  -- 標準日期時間
SELECT FROM_UNIXTIME(ts_col, '%Y-%m-%d') FROM tbl;            -- 僅日期
SELECT FROM_UNIXTIME(ts_col, '%H:%i:%s') FROM tbl;            -- 僅時間

格式修飾符速查

修飾符含義範例
%Y4 位年份2024
%y2 位年份24
%m月份 (01-12)01
%c月份 (1-12)1
%d日期 (01-31)15
%e日期 (1-31)15
%H小時 24制 (00-23)14
%h/%I小時 12制 (01-12)02
%i分鐘 (00-59)30
%s/%S秒 (00-59)45
%W星期名稱Monday
%a星期縮寫Mon
%M月份名稱January
%b月份縮寫Jan
%j年內天數 (001-366)015
%r12制時間 (hh:mm:ss AM/PM)02:30:45 PM
%T24制時間 (hh:mm:ss)14:30:45
%%字面 %%

毫秒級時間戳處理

部分語言 (Java/JS) 產生 13 位毫秒戳,MySQL 函數需秒級:

-- 截取前 10 位
SELECT FROM_UNIXTIME(1705324245123 / 1000);
-- 或
SELECT FROM_UNIXTIME(FLOOR(1705324245123 / 1000));

實戰:資料寫入與查詢

-- 寫入:應用層傳入日期字串,資料庫轉時間戳存 INT/BIGINT
INSERT INTO events (event_time) VALUES (UNIX_TIMESTAMP('2024-01-15 14:30:00'));

-- 查詢:轉回可讀日期
SELECT id, FROM_UNIXTIME(event_time, '%Y-%m-%d %H:%i:%s') AS event_dt FROM events;

-- 範圍查詢:利用索引 (event_time 為 INT 索引)
SELECT * FROM events 
WHERE event_time BETWEEN UNIX_TIMESTAMP('2024-01-01') AND UNIX_TIMESTAMP('2024-01-31 23:59:59');

時區陷阱提醒

  • UNIX_TIMESTAMP() 受 Session time_zone 影響
  • 應用層建議統一用 UTC 存儲,顯示層按用戶時區轉換
  • MySQL 8.0+ 建議用 TIMESTAMPADD/TIMESTAMPDIFF 做運算
copyright © 萬盛學電腦網 all rights reserved