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

SQL Server 日期相減完整指南:DATEDIFF 各單位用法與實戰範例

     編輯:關於SqlServer

DATEDIFF 語法

DATEDIFF ( datepart , startdate , enddate )

回傳 enddate - startdate 的 datepart 邊界跨越數 (有號整數)。

支援 datepart 單位

datepart縮寫說明
yearyy, yyyy年界跨越數
quarterqq, q季界跨越數
monthmm, m月界跨越數
dayofyear / daydy, y / dd, d天界跨越數
weekwk, ww週界跨越數 (週日為週首)
hourhh時界跨越數
minutemi, n分界跨越數
secondss, s秒界跨越數
millisecondms毫秒界跨越數
microsecondmcs微秒界跨越數
nanosecondns奈秒界跨越數

實戰範例

-- 1. 兩日期相差天數
SELECT DATEDIFF(DAY, '2012-01-03', CONVERT(VARCHAR(8), GETDATE(), 112));

-- 2. 年齡計算 (年界跨越)
SELECT DATEDIFF(YEAR, BirthDate, GETDATE()) -
       CASE WHEN DATEADD(YEAR, DATEDIFF(YEAR, BirthDate, GETDATE()), BirthDate) > GETDATE() THEN 1 ELSE 0 END AS Age;

-- 3. 會員存活天數
SELECT DATEDIFF(DAY, CreateDate, GETDATE()) AS SurvivalDays FROM Members;

-- 4. 逾期分鐘數
SELECT DATEDIFF(MINUTE, DueDate, GETDATE()) AS OverdueMinutes FROM Orders;

常見誤區

  • 非精確間隔:DATEDIFF(DAY, '2023-12-31 23:59', '2024-01-01 00:01') = 1 (跨越午夜),實際僅 2 分鐘。
  • 需精確間隔請用 DATEDIFF(SECOND, ...) 或 DATEDIFF(MINUTE, ...) 再換算。
  • startdate > enddate 回傳負數。

進階:精確時間差格式化

DECLARE @diff BIGINT = DATEDIFF(SECOND, @start, @end);
SELECT
    @diff / 86400 AS Days,
    (@diff % 86400) / 3600 AS Hours,
    (@diff % 3600) / 60 AS Minutes,
    @diff % 60 AS Seconds;

相容性

  • SQL Server 2008+ 全支援。
  • Azure SQL Database / Managed Instance 同樣適用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved