我有一个使用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)
它也返回错误的参数错误。任何帮助,将不胜感激 。感谢
答案 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')
)
答案 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,你可以尝试一下。