如何将SQL的DateDiff函数的间隔转换为Datetime数据类型

时间:2013-08-21 10:00:02

标签: sql datediff

我有一个使用SQL的DateDiff函数的查询。时间间隔根据我的方式返回min,hour或days。我想返回一个Datetime数据类型而不是生成的整数类型。我试着把它投射如下。

 DATEDIFF(cast(MIN as datetime), b.FollowUpTime, a.FollowUpTime) 

这会返回错误。我也试过

DATEDIFF(Convert(datetime,convert(char(8),MiNUTE)), b.FollowUpTime, a.FollowUpTime)

它也返回错误的参数错误。任何帮助,将不胜感激 。感谢

2 个答案:

答案 0 :(得分:1)

您可以使用它来查找两个日期之间的差异:

SELECT 
    convert(VARCHAR, abs(datediff(second, @date1, @date2) / 60 / 60 / 24)) 
    + ':' + 
    convert(VARCHAR, abs(((datediff(second, @date1, @date2) / 60) / 60) % 24)) 
    + ':' + 
    convert(VARCHAR, abs((datediff(second, @date1, @date2) / 60) % 60)) 
    + ':' + 
    convert(VARCHAR, abs((datediff(second, @date1, @date2) % 60)))

您只需将@date1@date2更改为您需要的日期。

这是SQLFiddle where you can test this out

如果 确实要转换为日期时间 ,请使用以下命令:

SELECT 
    convert(DATETIME, 
        (convert(VARCHAR, abs(((datediff(second, @date1, @date2) / 60) / 60) % 24)) 
         + ':' + 
        convert(VARCHAR, abs((datediff(second, @date1, @date2) / 60) % 60)) 
         + ':' + 
        convert(VARCHAR, abs((datediff(second, @date1, @date2) % 60)))
           ) 
   + dateadd(day, 
             abs(datediff(second, @date1, @date2) / 60 / 60 / 24), 
             '01-01-1900 00:00:00')
             )

这是SQLFiddle for the second query

答案 1 :(得分:0)

正如评论中所指出的,DATEDIFF会返回两个日期差异的INT值。

由于DATETIME基于1900-01-01作为“基准日期”,意​​味着将0分配给DATETIME将导致值为1900-01-01,您可以添加日期差异到那个并得到一个相对于那个时间点的值(1900-01-01)。

以下是一个例子:

DECLARE @date1 DATETIME = GETUTCDATE()
DECLARE @date2 DATETIME = DATEADD(DAY, -1, GETUTCDATE())

DECLARE @zeroDate DATETIME = 0

SELECT DATEADD(SECOND, DATEDIFF(SECOND, @date1, @date2), @zeroDate)

我还设置了一个SQLFiddle,你可以尝试一下。