【发布时间】:2011-01-29 07:56:56
【问题描述】:
考虑两个日期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
【讨论】:
你想要DATEDIFF函数:
SELECT DATEDIFF(hh, @date1, @date2)
【讨论】:
William Salzman 的answer 的问题在于,如果第一次不在时间,它会返回奇怪的答案。所以 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
【讨论】:
DATEDIFF 功能将解决您获取小时差异的问题。
你可以这样检查:
select DATEDIFF(hh, getdate()-1, GETDATE()) HoursDifference
它会给你24小时的结果
谢谢
【讨论】:
似乎有多种方法可以回答这个问题,但对我来说,我一直相信从小处着手的概念——比如获得整体价值,然后将其转化为答案你想要的。
假设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 得到小时数。
第一个选项给你一个大的小数,而第二个选项将它四舍五入到最接近的小数。
【讨论】: