5

我必须在 SQL Server 2012 中使用 T-SQLtime为现有价值添加价值。datetime

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

也许我已经以某种方式time转换为datetime

所以我有

开始日期 2013-02-18 18:34:40.330(日期时间)

间隔 00:11:00.0000000(时间)

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

有什么线索吗?

4

3 回答 3

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 小时时会发生什么?您应该存储事件的开始时间和结束时间(这些事情通常至少与持续时间一样相关),并且您始终可以从这些点计算持续时间。

于 2013-03-05T16:06:42.830 回答
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)
于 2013-03-05T15:56:38.630 回答
2

我最近一直在使用 Azure-DB,并尝试了下面的代码。这在 SQL 2012 中不起作用。有关 SQL 日期算术的更多信息,请参阅这篇文章: Azure-DB 与 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
于 2014-06-13T10:20:59.860 回答