如何在两个日期之间显示小时和分钟

时间:2016-03-31 05:32:53

标签: sql sql-server sql-server-2008 sql-server-2012

我有一个表包含日期时间列" StartTime"和" CompleteTime"。最初,completeTime列将为NULL,直到该过程完成。现在我的要求是显示小时和分钟,如下所示

输出: 例:2:01小时 (这意味着" 2"代表小时和" 01"代表分钟)

我试过如下:

Declare @StartDate dateTime = '2016-03-31 04:59:11.253'
Declare @EndDate dateTime = GETUTCDATE()

SELECT REPLACE(CONVERT(VARCHAR,CAST(DATEDIFF(second, @StartDate, 
ISNULL(GETUTCDATE(),@EndDate)) / 36000.0 AS DECIMAL(9,2))) + ' hr','.',':')

输出:

0:05 hr

必填项:

0:32 hr

注意:您好,在给出否定标记时,请检查一次我的查询。我已经提到了与此相关的一些链接,但它不会起作用。

3 个答案:

答案 0 :(得分:1)

试试这个(MS SQL查询) -

Declare @StartDate dateTime = '2016-03-31 04:59:11.253'
Declare @EndDate dateTime = GETUTCDATE()

SELECT CONVERT(varchar(5), 
   DATEADD(minute, DATEDIFF(minute, @StartDate, @EndDate), 0), 114) + ' hr'

结果 - 00:47小时

答案 1 :(得分:1)

试试这个

DECLARE @STARTDATE DATETIME = '2016-03-31 04:59:11.253'
DECLARE @ENDDATE DATETIME = GETUTCDATE()

SELECT CONVERT(VARCHAR(10),DATEDIFF(MINUTE, @STARTDATE, @ENDDATE)/60)+':'+CONVERT(VARCHAR(10),DATEDIFF(MINUTE, @STARTDATE, @ENDDATE)%60)+' hr' AS DIFF

结果:

Diff
0:52 hr

差异超过24小时也将处理此

72:56 hr

答案 2 :(得分:0)

Declare @StartDate dateTime = '2016-03-31 04:59:11.253'

SELECT CONVERT(varchar(10),DATEADD(minute, DATEDIFF(minute, @StartDate,GETUTCDATE()), 0), 114) + ' Hr'

返回:' 0:43 Hr'

由于ISNULL(GETUTCDATE(),@EndDate)永远不会是GETUTCDATE(),而你NULL而不是36000,所以3600没有做任何事情,但是您的查询的主要问题是您将十进制值放入sexagesimal容器(60分钟/小时)。即:90秒应该是1:30而不是:9

编辑:在我的初始查询中混合,DATEADD()方法更清晰。