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

SQL 日期時間與間隔類型詳解:DATE、TIME、TIMESTAMP 與時區處理

     編輯:關於SqlServer

日期時間類型是業務系統最常用也最易出錯的類型。SQL-92 定義三大核心類型,時區處理是跨地域應用的核心難點。

三大核心類型

類型組成格式/長度時區感知
DATE年、月、日YYYY-MM-DD (10字符)無
TIME(p)時、分、秒[.小數秒]hh:mm:ss[.p] (8+p字符)無 (隱含服務器時區)
TIMESTAMP(p)日期+時間[.小數秒]YYYY-MM-DD hh:mm:ss[.p] (19+p字符)無
TIME(p) WITH TIME ZONE時間+時區偏移hh:mm:ss[.p]+hh:mm (14+p+1字符)有 (偏移範圍 -12:59~+13:00)
TIMESTAMP(p) WITH TIME ZONE日期時間+時區偏移類上有

關鍵規則

  • 同類型間才能比較/賦值(DATE 不能直接比 TIMESTAMP)
  • 精度 p 可選,默認 0(秒無小數)
  • UTC 基準:00:00:00 為格林威治午夜,服務器時區隱含
  • WITH TIME ZONE 類型存儲偏移量,不存儲具體時區名(無夏令時感知)

SQL Server 實現差異

  • DATETIME (3.33ms 精度) / SMALLDATETIME (分鐘精度) — 老類型
  • DATE, TIME, DATETIME2 (100ns 精度), DATETIMEOFFSET (含時區) — 2008+ 推薦新類型
  • GETDATE() 返回服務器時間;SYSUTCDATETIME() 返回 UTC 高精度時間
  • AT TIME ZONE (2016+) 實現時區轉換

跨地域應用最佳實踐

  1. 數據庫層統一存儲 UTC(DATETIME2 或 DATETIMEOFFSET)
  2. 應用層按用戶時區做展示轉換
  3. 避免在 SQL 中做時區運算,交給成熟庫(NodaTime、Moment.js 等)
  4. 備份/複製/同步時保持 UTC 不變
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved