如何在SQL Server中获取两个日期之间的总小时数?

19

考虑两个日期2010-03-18 22:30:452010-03-19 03:30:15 .... 如何在SQL Server中获取这两个日期之间的小时数和分钟数.....

5个回答

23

@codeka回答了你标题中的小时部分,但在问题的正文中,你要求小时和分钟,所以这里提供一种方法

 select DATEDIFF(hh, @date1, @date2) as Hours_Difference,   
    DATEDIFF(mi,DATEADD(hh,DATEDIFF(hh, @date1, @date2),@date1),@date2) as Minutes_Difference

这段代码的第一部分与 @codeka 显示的内容相同,计算出两个日期之间的小时数差。SQL语句的第二部分计算出第一个日期加上经过的小时数后与第二个日期之间的分钟数差。在分钟部分中必须从方程式中排除小时,否则将得到两个日期之间的实际分钟数。有关 Datediff 及其允许的 Datepart 标识符的详细信息,请参见此处:
http://msdn.microsoft.com/en-us/library/ms189794.aspx


我不明白这里的“Minutes DIFF”是如何工作的。它看起来有些过头了。为什么不直接使用DATEDIFF(mi, Date1, Date2)呢?那对我来说很有效。 - Fandango68
如果问题只是要求日期之间的分钟数而不是小时和分钟,你提出的答案可以起作用。 - William Salzman

6
您需要使用 DATEDIFF 函数:
SELECT DATEDIFF(hh, @date1, @date2)

1
DATEDIFF 将根据此处的规范返回几乎任何日期部分:http://msdn.microsoft.com/en-us/library/ms189794.aspx - William Salzman

4

William Salzman答案有一个问题,如果第一个时间点不是整点,则返回奇怪的答案。所以10:30到12:00会得到2小时和-30分钟的结果。

如果这不是您想要的结果,则以下代码会给出1小时30分钟:

select 
    CONVERT(int,DATEDIFF(mi, @date1, @date2) / 60) as Hrs_Difference,
    CONVERT(int,DATEDIFF(mi, @date1, @date2) % 60) as Mins_Difference

实际上应该是这样的: select CONVERT(int,DATEDIFF(hour, @date1, @date2) / 60) as Hrs_Difference, CONVERT(int,DATEDIFF(mi, @date1, @date2) % 60) as Mins_Difference - Michael Tuma

0

看起来有很多种方法可以回答这个问题,但对我来说,我一直相信从小做起的理念 - 也就是先获得总体价值,然后将其转换为你想要的答案。

假设date2大于date1

一个简单的数学差乘以一天24小时即可:

CAST(date2 - date1 as NUMERIC(18,4)) * 24.00 AS [HrsDiff]

或者使用Will的答案,使用[min]表示分钟:

CAST(DATEDIFF(mi, date1, date2) AS NUMERIC(18,4)) / 60 AS [HrsDiff]

因此,将分钟总数除以60即可得到小时数。

第一种选项会给出一个大的小数,而第二种选项会将其四舍五入到最近的小数位。


0

DATEDIFF函数可以解决您获取小时差异的问题。

您可以按照以下方式进行检查:

select DATEDIFF(hh, getdate()-1, GETDATE()) HoursDifference

它将为您提供24小时的结果

谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接