首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 僅修改日期部分保持時間不變:DATEADD 函數的巧妙用法

     編輯:程式設計綜合問答

核心技巧

DATEADD 以指定日期部分遞增/遞減時,**保留其他部分原值**。

常用場景

1. 增加/減少天、月、年(時間不變)

-- 將日期字段加 1 天,時間不變
UPDATE MyTable SET DateCol = DATEADD(day, 1, DateCol);

-- 將日期字段加 1 個月
UPDATE MyTable SET DateCol = DATEADD(month, 1, DateCol);

2. 設置為具體日期(如 2014-12-11)保持原時間

-- 方法:計算目標日期與當前日期的天數差,再加上去
DECLARE @TargetDate DATE = '2014-12-11';
UPDATE MyTable 
SET DateCol = DATEADD(day, DATEDIFF(day, DateCol, @TargetDate), DateCol);

原理:DATEDIFF(day, DateCol, @TargetDate) 只比較日期部分,忽略時間;DATEADD(day, diff, DateCol) 再把差值加回原 datetime,時間完整保留。

3. 批量修正「日期錯誤但時間正確」的數據

-- 假設所有 2014-10-11 的記錄應為 2014-12-11
UPDATE MyTable 
SET DateCol = DATEADD(day, DATEDIFF(day, DateCol, '2014-12-11'), DateCol)
WHERE CAST(DateCol AS DATE) = '2014-10-11';

注意

  • DATEADD 返回類型與輸入類型一致(datetime/datetime2/smalldatetime)。
  • 跨月/跨年自動處理(如 1月31日 + 1個月 = 2月28/29日)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved