我有两个类型@date
的变种datetime
和@time
类型的time
。我想添加两个来获取另一个datetime
变量。我想对它进行进一步的计算。
前:
Declare @date datetime
Declare @time time
我想要这样的东西
@date = @date + @time (but not concatenation)
SELECT @Startdate = DATEADD(DAY, -1, @date )
有什么办法吗?
答案 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