如何在SQL Server中查找小时、分钟和秒(所有结果)的时差

如何在SQL Server中查找小时、分钟和秒(所有结果)的时差,sql,sql-server,database,datetime,time,Sql,Sql Server,Database,Datetime,Time,如何找到所有条件下的时差,如 如果差别只有几分钟 49 mintus 如果时差 1 hour 20 minutes 我正在努力 SELECT DATEDIFF(MINUTE,'2018-08-09 10:16:49.000','2018-08-09 11:14:40.000') AS Diff 但这只在几分钟内播出 我也试过这个 DECLARE @StartTime datetime = '2018-08-09 10:16:49.000', @EndTime dat

如何找到所有条件下的时差,如

如果差别只有几分钟

 49 mintus
如果时差

 1 hour 20 minutes
我正在努力

SELECT DATEDIFF(MINUTE,'2018-08-09 10:16:49.000','2018-08-09 11:14:40.000') AS Diff  
但这只在几分钟内播出

我也试过这个

DECLARE @StartTime datetime = '2018-08-09 10:16:49.000',
        @EndTime datetime = '2018-08-09 12:44:05.000'
SELECT CAST(@EndTime - @StartTime as Time) As TimeDiffere
输出:02:27:16.0000000


但我想说的是2小时27分钟16秒

如果您的SQL server版本高于2012,您可以尝试使用函数

CREATE TABLE T(
 StartTime datetime,
  EndTime datetime
);

insert into t values ('2018-08-09 10:16:49.000','2018-08-09 12:44:05.000')
问题1:

:

反斜杠\可以从hr、min、s…等格式中转义关键字,然后将其显示为原始单词。

如果获取hh.mm.ss的日期时间功能较差,则可以使用apply:

 DECLARE @StartTime datetime = '2018-08-09 10:01:15.000',
        @EndTime datetime = '2018-08-09 12:50:00.000'
SELECT CONCAT((DATEDIFF(second,@StartTime,@EndTime )/60)/60,'hr ',(DATEDIFF(second,@StartTime,@EndTime)/60)%60,'mins ',DATEDIFF(second,@StartTime,@EndTime)%60,'Sec') 
As TimeDiffere

此答案不会返回正确的结果。这将返回1小时,即使只有1分钟:选择datediffhh,'11:59','12:00',您需要使用相同的DATEDIFF来计算所有时间成分并输入答案。
|       TimeDiffere |
|-------------------|
| 02hr 27mins 16Sec |
 DECLARE @StartTime datetime = '2018-08-09 10:01:15.000',
        @EndTime datetime = '2018-08-09 12:50:00.000'
SELECT CONCAT((DATEDIFF(second,@StartTime,@EndTime )/60)/60,'hr ',(DATEDIFF(second,@StartTime,@EndTime)/60)%60,'mins ',DATEDIFF(second,@StartTime,@EndTime)%60,'Sec') 
As TimeDiffere
DECLARE @StartTime  datetime = '2018-08-09 12:16:49.000',
        @EndTime    datetime = '2018-08-09 12:44:05.000'

select  [hour] + [minute] + [second] as TimeDiffere
from    (
            select diff_sec = datediff(second, @StartTime, @EndTime)
        ) t
        cross apply
        (
            select  [hour] = isnull(convert(varchar(10), nullif(diff_sec / 60 / 60, 0)) 
                           + ' hours ', '')
        ) hr
        cross apply
        (
            select  [minute] = isnull(convert(varchar(10), nullif(diff_sec / 60 % 60, 0)) 
                             + ' mintues ', '')
        ) mn
        cross apply
        (
            select  [second] = isnull(convert(varchar(10), nullif(diff_sec % 60, 0)) 
                             + ' seconds', '')
        ) sc

/*  RESULT

27 mintues 16 seconds

*/
select t.*, concat( (dtdiff / 3600), 'hr ', (dtdiff / 60) % 60, 'mins ', dtdiff % 60, 'sec')
from table t cross apply
     ( values (datediff(second, startdate, enddate)) 
     ) tt(dtdiff);