如何在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);