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

SQL 日期時間函數完全指南:GETDATE、CONVERT 格式化、毫秒精度與預設值

     編輯:關於SqlServer

取得當前日期時間

SELECT GETDATE();  -- 回傳 DATETIME,精度 3.33 毫秒
-- 結果範例: 2024-01-15 14:30:45.123

作為欄位預設值:自動記錄建立/修改時間

CREATE TABLE SiteLog (
    UserName     NVARCHAR(50),
    Activity     NVARCHAR(200),
    EntryDate    DATETIME DEFAULT GETDATE()  -- 插入時自動填入當前時間
);

CONVERT 格式化輸出:標準格式代碼對照表

代碼標準/風格輸出範例
0預設 (mon dd yyyy hh:miAM)Jan 15 2024 2:30PM
1美國 (mm/dd/yy)01/15/24
2ANSI (yy.mm.dd)24.01.15
3英/法 (dd/mm/yy)15/01/24
4德國 (dd.mm.yy)15.01.24
5義大利 (dd-mm-yy)15-01-24
6- (dd mon yy)15 Jan 24
7- (mon dd, yy)Jan 15, 24
8- (hh:mi:ss)14:30:45
9預設 + 毫秒 (mon dd yyyy hh:mi:ss:mmmAM)Jan 15 2024 2:30:45:123PM
10美國 (mm-dd-yy)01-15-24
11日本 (yy/mm/dd)24/01/15
12ISO (yymmdd)240115
13歐洲預設 + 毫秒 (dd mon yyyy hh:mi:ss:mmm 24h)15 Jan 2024 14:30:45:123
14- (hh:mi:ss:mmm 24h)14:30:45:123
20ODBC 標準 (yyyy-mm-dd hh:mi:ss)2024-01-15 14:30:45
21ODBC 毫秒 (yyyy-mm-dd hh:mi:ss.mmm)2024-01-15 14:30:45.123
126ISO 8601 (yyyy-mm-ddThh:mi:ss.mmm)2024-01-15T14:30:45.123
127ISO 8601 帶時區2024-01-15T14:30:45.123Z

常用格式化範例

-- 含毫秒 (代碼 9/21/121)
SELECT CONVERT(VARCHAR(30), GETDATE(), 9);   -- Jan 15 2024  2:30:45:123PM
SELECT CONVERT(VARCHAR(30), GETDATE(), 21);  -- 2024-01-15 14:30:45.123
SELECT CONVERT(VARCHAR(30), GETDATE(), 121); -- 2024-01-15T14:30:45.123

-- 純日期
SELECT CONVERT(VARCHAR(10), GETDATE(), 112); -- 20240115 (適合排序、分區)
SELECT CONVERT(VARCHAR(10), GETDATE(), 23);  -- 2024-01-15

-- 純時間
SELECT CONVERT(VARCHAR(12), GETDATE(), 14);  -- 14:30:45:123
SELECT CONVERT(VARCHAR(8),  GETDATE(), 108); -- 14:30:45

日期時間運算函數

函數用途範例
DATEADD加減間隔DATEADD(DAY, -7, GETDATE()) 一週前
DATEDIFF計算差距DATEDIFF(SECOND, StartTime, EndTime) 執行秒數
DATEPART取單一部分DATEPART(HOUR, GETDATE()) 當前小時
DATENAME取名稱DATENAME(MONTH, GETDATE()) 'January'
DAY/MONTH/YEAR快捷取值YEAR(GETDATE()) 2024

新版本推薦 (SQL Server 2012+)

-- FORMAT 函數 (依 .NET 格式字串,支援文化特性)
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss.fff', 'zh-TW');  -- 2024-01-15 14:30:45.123
SELECT FORMAT(GETDATE(), 'D', 'zh-TW');  -- 2024年1月15日

-- DATETIME2 / DATETIMEOFFSET 更高精度 (100 奈秒) 與時區感知
DECLARE @dt2 DATETIME2(7) = SYSDATETIME();      -- 2024-01-15 14:30:45.1234567
DECLARE @dto DATETIMEOFFSET(7) = SYSDATETIMEOFFSET(); -- 2024-01-15 14:30:45.1234567 +08:00

實務建議

  1. 儲存用 DATETIME2(3~7):精度更高、範圍更大 (0001-9999 年)、儲存體更省 (6-8 bytes vs 8 bytes)。
  2. 跨時區系統用 DATETIMEOFFSET:保留原始時區資訊,避免換算錯誤。
  3. 查詢範圍條件用「半開區間」:WHERE CreatedAt >= '2024-01-01' AND CreatedAt < '2024-02-01',利用索引、避免隱含轉換。
  4. 避免在 WHERE 欄位上用函數:WHERE YEAR(CreatedAt) = 2024 → 索引失效;改用範圍條件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved