如何在T-SQL中对DateTime2与Time(7)进行加减运算?
解决DateTime2与Time类型的加减运算问题
正确实现方式
直接使用加减运算符即可完成DateTime2和Time类型的运算,SQL Server支持这两种类型直接进行加减操作,会完整保留原DateTime2的时间精度:
DECLARE @createdAt DATETIME2 = '2023-03-11 23:08:56.990'; DECLARE @dayOffset TIME(7) = '04:00:00'; -- 时间相加 SELECT @createdAt + @dayOffset AS AddedResult; -- 返回结果:2023-03-12 03:08:56.9900000 -- 时间相减 SELECT @createdAt - @dayOffset AS SubtractedResult; -- 返回结果:2023-03-11 19:08:56.9900000
如果一定要使用DATEADD函数,需要先将Time类型转换为对应的总秒数,再基于原DateTime2进行偏移:
-- 用DATEADD实现相加 SELECT DATEADD(SECOND, DATEDIFF(SECOND, '00:00:00', @dayOffset), @createdAt) AS AddedResult_DateAdd; -- 用DATEADD实现相减 SELECT DATEADD(SECOND, -DATEDIFF(SECOND, '00:00:00', @dayOffset), @createdAt) AS SubtractedResult_DateAdd;
错误原因分析
你之前的DATEADD写法返回错误结果,核心原因是没有以@createdAt的完整时间作为基准进行偏移,而是错误地只处理了日期部分,或是直接用Time生成了新时间,导致原DateTime2的时分秒精度被丢失。
内容的提问来源于stack exchange,提问作者Platypus
相关产品推荐
相关产品推荐

