DATEADD 以指定日期部分遞增/遞減時,**保留其他部分原值**。
-- 將日期字段加 1 天,時間不變
UPDATE MyTable SET DateCol = DATEADD(day, 1, DateCol);
-- 將日期字段加 1 個月
UPDATE MyTable SET DateCol = DATEADD(month, 1, DateCol);
-- 方法:計算目標日期與當前日期的天數差,再加上去
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,時間完整保留。
-- 假設所有 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)。