我有一个表包含日期时间列" 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
注意:您好,在给出否定标记时,请检查一次我的查询。我已经提到了与此相关的一些链接,但它不会起作用。
答案 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()
方法更清晰。