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

MySQL 時間戳與日期互轉:UNIX_TIMESTAMP 與 FROM_UNIXTIME 實戰指南

     編輯:MySQL 綜合教學

MySQL INT 時間戳與 DATETIME 互轉核心函數

在系統設計中,常需在「整數時間戳(INT)」與「日期時間(DATETIME)」之間轉換。MySQL 提供兩個核心函數完美支援此場景,效能極高且無時區困擾(以服務器時區為準)。

核心函數對照

轉換方向函數語法範例說明
日期時間 → 時間戳 UNIX_TIMESTAMP() SELECT UNIX_TIMESTAMP('2009-07-16 00:53:00'); 返回距 1970-01-01 秒數,插入時常用
時間戳 → 日期時間 FROM_UNIXTIME() SELECT FROM_UNIXTIME(1350437720); 返回 DATETIME 格式,查詢顯示常用
當前時間 → 時間戳 UNIX_TIMESTAMP(NOW()) SELECT UNIX_TIMESTAMP(NOW()); 獲取當前秒級時間戳

實戰應用模式

建表設計建議

CREATE TABLE events (
  id INT PRIMARY KEY AUTO_INCREMENT,
  event_name VARCHAR(100),
  -- 使用 INT 存儲時間戳,節省空間且便於跨語言交互
  created_at INT UNSIGNED NOT NULL DEFAULT 0,
  updated_at INT UNSIGNED NOT NULL DEFAULT 0
);

插入數據(應用層或 SQL 直接轉換)

-- 方式一:應用層傳入時間戳
INSERT INTO events (event_name, created_at) VALUES ('用戶註冊', 1704067200);

-- 方式二:SQL 現場轉換
INSERT INTO events (event_name, created_at) 
VALUES ('訂單創建', UNIX_TIMESTAMP('2024-01-01 12:00:00'));

查詢與報表(格式化輸出)

-- 基礎轉換
SELECT event_name, FROM_UNIXTIME(created_at) AS created_dt FROM events;

-- 格式化輸出
SELECT event_name, DATE_FORMAT(FROM_UNIXTIME(created_at), '%Y-%m-%d %H:%i') AS created_fmt FROM events;

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

避坑指南

  • 時區一致性:函數依賴 MySQL 服務器 time_zone 系統變量,確保寫入/讀取環境時區一致
  • 年份 2038 問題:32 位有符號整數最大值對應 2038-01-19,長期項目建議使用 BIGINT 或原生 DATETIME
  • 精度損失:秒級時間戳無法保存毫秒,高精度場景請用 DATETIME(3) 或 TIMESTAMP(3)
  • 跨庫遷移:SQL Server 無對應函數,遷移時需在應用層統一轉換或使用 ETL 工具處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved