如何使用时间字段添加日期时间字段

时间:2013-03-05 15:48:29

标签: sql-server tsql datetime time sql-server-2012

我必须使用SQL Server 2012中的T-SQL将time值添加到现有datetime值。

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

也许我不知何故time转换为datetime

所以我有

  

StartDate 2013-02-18 18:34:40.330(datetime)

     

间隔时间00:11:00.0000000(时间)

     

EndDate? tsql? (日期时间)

有任何线索吗?

3 个答案:

答案 0 :(得分: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列中存储 interval time表示时间点,而不是持续时间。当间隔> = 24小时时会发生什么?您应该存储事件的开始时间和结束时间(这些事件通常至少与持续时间相关),并且您始终可以从这些点计算持续时间。

答案 1 :(得分: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)

答案 2 :(得分:2)

我最近一直在使用Azure-DB并尝试了下面的代码。这在SQL 2012中不起作用。 有关SQL-date算术的更多信息,请参阅此帖子: 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