考虑两个日期2010-03-18 22:30:45
和2010-03-19 03:30:15
.... 如何在SQL Server中获取这两个日期之间的小时数和分钟数.....
考虑两个日期2010-03-18 22:30:45
和2010-03-19 03:30:15
.... 如何在SQL Server中获取这两个日期之间的小时数和分钟数.....
@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
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看起来有很多种方法可以回答这个问题,但对我来说,我一直相信从小做起的理念 - 也就是先获得总体价值,然后将其转换为你想要的答案。
假设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即可得到小时数。
第一种选项会给出一个大的小数,而第二种选项会将其四舍五入到最近的小数位。
DATEDIFF函数可以解决您获取小时差异的问题。
您可以按照以下方式进行检查:
select DATEDIFF(hh, getdate()-1, GETDATE()) HoursDifference
它将为您提供24小时的结果
谢谢