2013-03-05 143 views
5

我要time值添加到现有的SQL Server中使用T-SQL datetime值2012如何添加日期时间字段有时间字段

我想,DATEADD功能它可能是一个解决方案,但它是不...

也许我有某种方式time转换为datetime

所以不得不

开始日期2013年2月18日18:34:40.330(日期时间)

间隔00:11:00.0000000(时间)

结束日期? tsql? (日期时间)

任何线索?

回答

8

尝试类似这样的事情。注:我没有采取毫秒这里

declare @dt datetime = getdate() 
declare @t time = '01:35:45' 

select dateadd(second, 
        datepart(hour,@t) * 3600 + 
        datepart(minute,@t) * 60 + 
        datepart(second,@t), 
        @dt) 
22
DECLARE @d DATETIME = '2013-02-18T18:34:40.330', 
     @t TIME(7) = '00:11:00.0000000'; 

SELECT EndDate = DATEADD(SECOND, DATEDIFF(SECOND, 0, @t), @d); 

结果:现在

EndDate 
----------------------- 
2013-02-18 18:45:40.330 

,你真的不应该在time列存储间隔time旨在表示时间点,而不是持续时间。当间隔> = 24小时时会发生什么?您应该存储事件的开始时间和结束时间(这些事情通常至少与持续时间相关),并且始终可以计算这些时间点的持续时间。

+0

感谢您的最后一段!是的,我存储间隔<24小时。 – 2013-03-05 16:09:54

+3

但是,将间隔*作为“时间”存储的意义何在?为什么不储存秒数? – 2013-03-05 16:10:57

+0

当我们有用户直接输入的静态表格时,用时间来存储是非常有益的,因此它更易于理解。使用DATEDIFF获得秒数非常聪明。谢谢。 – 2013-10-20 16:12:11

2

我最近一直在使用Azure-DB,并尝试下面的代码。这并不在SQL 2012年工作 看到这个职位上SQL最新算术更多的信息: Difference in datetime and time arithmetic in Azure-DB vs. sql-server 2008R2

我有点迟到了,但由于明显的方式做到这一点是缺少...

DECLARE @StartDate datetime 
DECLARE @Interval time 
DECLARE @EndDate datetime 
SET @StartDate = '2013-02-18 18:34:40.330' 
SET @Interval = '00:11:00.000000' 

SET @EndDate = @StartDate + @Interval 

SELECT @StartDate StartDate, @Interval Interval, @EndDate EndDate 

Output: 
StartDate     Interval    EndDate 
2013-02-18 18:34:40.330 00:11:00.0000000 2013-02-18 18:45:40.330 
相关问题