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

SQL Server 2008 日期時間新資料類型:DATE、TIME、DATETIME2、DATETIMEOFFSET 實戰指南

     編輯:關於SqlServer

舊類型的侷限

  • DATETIME:8 位元組,1753-9999 年,精度 3.33 ms,日期時間混存。
  • SMALLDATETIME:4 位元組,1900-2079 年,精度 1 分鐘。
  • 無法單獨儲存「日期」或「時間」,精度不足、範圍受限,遷移異構資料困難。

SQL Server 2008 四大新類型

類型儲存大小日期範圍時間精度適用場景
DATE3 bytes0001-01-01 ~ 9999-12-31無生日、效期、單純日期
TIME(n)3-5 bytes無100 ns (n=7)每日排程、耗時統計
DATETIME2(n)6-8 bytes0001-01-01 ~ 9999-12-31100 ns (n=7)高精度時間戳記、歷史資料
DATETIMEOFFSET(n)8-10 bytes0001-01-01 ~ 9999-12-31100 ns (n=7)跨時區應用、全球化系統

DATETIME2 精度與儲存關係

DATETIME2 精度對照表

  • DATETIME2(3) 相當舊 DATETIME 但精度 1 ms、省 1 byte。
  • DATETIME2(7) 達 100 ns,但不保證唯一性(同一表仍可有相同時間值)。

實作範例

-- 變數宣告與賦值
DECLARE @Dt DATE, @Tm TIME(7), @Dt2 DATETIME2(3), @Dto DATETIMEOFFSET(7);
SET @Dt = GETDATE();      -- 2024-01-15
SET @Tm = GETDATE();      -- 14:30:45.1234567
SET @Dt2 = GETDATE();     -- 2024-01-15 14:30:45.123
SET @Dto = SYSDATETIMEOFFSET(); -- 2024-01-15 14:30:45.1234567 +08:00

-- 建表預設值
CREATE TABLE Events
(
    EventID int PRIMARY KEY,
    EventDate DATE DEFAULT CAST(GETDATE() AS DATE),
    EventTime TIME(0) DEFAULT CAST(GETDATE() AS TIME(0)),
    CreatedAt DATETIME2(3) DEFAULT SYSDATETIME(),
    LogTime DATETIMEOFFSET(7) DEFAULT SYSDATETIMEOFFSET()
);

遷移建議

  1. 新開發專案優先使用新類型,精度與範圍更符合現代需求。
  2. 舊系統遷移時,DATETIME → DATETIME2(3) 無損;SMALLDATETIME → DATETIME2(0) 或 DATE+TIME(0)。
  3. 跨時區系統務必採用 DATETIMEOFFSET,避免應用層時區轉換錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved