T-SQL:将时间添加到 Datetime2

Pla*_*pus 1 t-sql sql-server datetime dateadd

DateTime2我想将 a和Time(7)值相加

DECLARE @createdAt datetime2 = '2023-03-11 23:08:56.990'
DECLARE @dayOffset time(7) = '04:00:00'
Run Code Online (Sandbox Code Playgroud)

因此,通过添加 2 个值,我最终会得到'2023-03-12 03:08:56.990'
最终我也想做同样的事情,但是通过减去,我会得到'2023-03-11 19:08:56.990'

我找到了添加这两个值的不同方法,但它总是删除时间部分DateTime

DECLARE @createdAt datetime2 = '2023-03-11 23:08:56.990'
DECLARE @dayOffset time(7) = '04:00:00'

SELECT
    DATEADD(DAY, DATEDIFF(DAY, @dayOffset, @createdAt), CONVERT(DATETIME2, @dayOffset))

SELECT 
    DATEADD(DAY, DATEDIFF(DAY, COALESCE(@dayOffset, '00:00:00'), @createdAt), CONVERT(DATETIME2, COALESCE(@dayOffset, '00:00:00')))
Run Code Online (Sandbox Code Playgroud)

但两人都回来了2023-03-11 04:00:00.0000000

执行此操作的正确方法是什么?

sig*_*nen 6

这是一种方法:

DECLARE @createdAt datetime2 = '2023-03-11 23:08:56.990'
DECLARE @dayOffset time(7) = '04:00:00'

select dateadd(ms, datediff(ms, 0, @dayOffset), @createdAt) -- add
select dateadd(ms, -datediff(ms, 0, @dayOffset), @createdAt) -- subtract
Run Code Online (Sandbox Code Playgroud)

基本上,它将时间值转换为毫秒,然后将其添加/减去您的日期