首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL UNIX 時間戳與日期時間互轉函數速查:FROM_UNIXTIME / UNIX_TIMESTAMP

     編輯:MySQL 綜合教學

核心函數對照

轉換方向函數範例結果
Unix Timestamp → 日期時間FROM_UNIXTIME(ts)SELECT FROM_UNIXTIME(1156219870);2006-10-22 12:31:10
日期時間 → Unix TimestampUNIX_TIMESTAMP(dt)SELECT UNIX_TIMESTAMP('2006-11-04 12:23:00');1162614180

進階用法

1. 格式化輸出

SELECT FROM_UNIXTIME(1156219870, '%Y-%m-%d %H:%i:%s');  -- 自定義格式
SELECT DATE_FORMAT(FROM_UNIXTIME(ts), '%Y-%m-%d');     -- 僅日期部分

2. 當前時間戳獲取

SELECT UNIX_TIMESTAMP();           -- 當前秒級時間戳
SELECT UNIX_TIMESTAMP(NOW());      -- 等價

3. 查詢當天記錄(高效寫法)

-- 避免對欄位用函數導致索引失效
SELECT * FROM message
WHERE chattime >= UNIX_TIMESTAMP(CURDATE())
  AND chattime <  UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY)
ORDER BY id DESC;

-- 原文寫法(會導致全表掃描,不推薦大表使用)
SELECT * FROM message
WHERE DATE_FORMAT(FROM_UNIXTIME(chattime), '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d');

時區注意事項

  • FROM_UNIXTIME、UNIX_TIMESTAMP 依賴會話 time_zone 系統變數(預設 SYSTEM)。
  • 跨時區應用建議:資料庫統一儲存 UTC 時間戳(SET time_zone = '+00:00'),應用層轉換顯示時區。
  • TIMESTAMP 欄位自動按會話時區轉換;DATETIME 不轉換,儲存原值。

版本差異提醒

  • MySQL 5.6.4+ DATETIME 支援微秒精度(DATETIME(6)),UNIX_TIMESTAMP 回傳整數秒,微秒部分需額外處理。
  • 8.0 UNIX_TIMESTAMP() 無參數形式被棄用,建議明確傳入 NOW() 或 CURRENT_TIMESTAMP。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved