如何在SQL Server中添加日期和时间

时间:2015-07-17 07:51:07

标签: sql sql-server

我有两个类型@date的变种datetime@time类型的time。我想添加两个来获取另一个datetime变量。我想对它进行进一步的计算。

前:

Declare @date datetime
Declare @time time

我想要这样的东西

@date = @date + @time (but not concatenation)

SELECT @Startdate = DATEADD(DAY, -1, @date )

有什么办法吗?

5 个答案:

答案 0 :(得分:1)

您的验证码是正确的。

DECLARE @date DATETIME = '1/1/2020'
DECLARE @time TIME = '1:00 pm'
DECLARE @Startdate DATETIME

SET @date = @date + @time

SELECT @Startdate = DATEADD(DAY, -1, @date)

@date = 2020-01-01 13:00:00.000
@Startdate = 2019-12-31 13:00:00.000

它不是串联的,而是将它们加在一起。 @date上的时间是0:00:00.000,因此它似乎是在将它们串联在一起。但是将@date更改为“ 1/1/2020 1:00 am”,然后:

@date = 2020-01-01 14:00:00.000
@Startdate = 2019-12-31 14:00:00.000

答案 1 :(得分:0)

如果您只需要@date中的日期部分和@time的时间部分 - 可以将@date@time转换为字符串,连接值并转换回来到日期时间:

select cast(convert(nvarchar(20), @date, 104) + ' ' +
            convert(nvarchar(20), @time, 108) as datetime2)

或者,或者,如果您需要将时间添加到日期时间值,您可以执行以下操作:

select dateadd(ms, 
           datepart(ms, @time), 
           dateadd(ss, 
                   datepart(ss, @time), 
                   dateadd(mi, 
                           datepart(mi, @time), 
                           dateadd(hh, datepart(hh, @time), @date))))

答案 2 :(得分:0)

您可以将时间转换为秒,并将其添加到日期时间值:

DECLARE @datetime DATETIME = GETDATE(),
        @time TIME = '01:16:24',
        @timeinseconds INT

PRINT 'we add ' + CAST(@time AS VARCHAR(8)) + ' to ' + CONVERT(VARCHAR,@datetime,120)+ ':'


SELECT @timeinseconds = DATEPART(SECOND, @time)
                        + DATEPART(MINUTE, @time) * 60
                        + DATEPART(HOUR, @time) * 3600

SET @datetime = DATEADD(SECOND,@timeinseconds,@datetime)

PRINT 'The result is: ' + CONVERT(VARCHAR,@datetime,120)

输出:

we add 01:16:24 to 2015-07-17 09:58:45:
The result is: 2015-07-17 11:15:09

答案 3 :(得分:0)

首先将@date@time变量转换为NVARCHAR(),然后将它们连接起来并将其转换为DATETIME数据类型。在它之后你可以在它上使用DATEADD功能。请尝试以下方法:

DECLARE @date DATETIME 
DECLARE @time TIME

SET @date = GETDATE()
SET @time = '10:12:13'

SELECT DATEADD(DAY, -1, CAST(CONVERT(NVARCHAR(20), @date, 110) + ' ' +
                             CONVERT(NVARCHAR(20), @time, 108) AS DATETIME))

输出今天第-1天+时间'10:12:13'):

2015-07-16 10:12:13.000

答案 4 :(得分:0)

我不确定这里发生了什么,但如果您的变量是日期时间和时间类型,这应该可以正常工作:

declare @date datetime
declare @time time

set @date = '20150717'
set @time = '12:34:56'

set @date = @date + @time

select @date, DATEADD(DAY,-1,@date)

请参阅SQL Fiddle

如果问题是@date还包含时间部分,您可以使用:

set @date = convert(datetime, convert(date, @date)) + @time