Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:如何格式化时间间隔?_Sql_Sql Server 2005 - Fatal编程技术网

SQL Server:如何格式化时间间隔?

SQL Server:如何格式化时间间隔?,sql,sql-server-2005,Sql,Sql Server 2005,我想将时间间隔格式化为'99d 99h 99m'。请参见以下SQL示例: -- 1501 minutes should be '1d 1h 1m' (= 1 day + 1 hour + 1 minute) select datediff(mi, '02-21-2012 00:00', '02-22-2012 01:01') 我的RDBMS是SQLServer2005。有什么聪明的方法可以做到这一点吗 select CAST(datediff(dd, '02-21-2012 00:00',

我想将时间间隔格式化为'99d 99h 99m'。请参见以下SQL示例:

-- 1501 minutes should be '1d 1h 1m' (= 1 day + 1 hour + 1 minute)
select datediff(mi, '02-21-2012 00:00', '02-22-2012 01:01') 
我的RDBMS是SQLServer2005。有什么聪明的方法可以做到这一点吗

select CAST(datediff(dd, '02-21-2012 00:00', '02-22-2012 01:01') AS VARCHAR(12))+'d '+
CAST(datediff(hh, '02-21-2012 00:00', '02-22-2012 01:01')%24 AS VARCHAR(2))+'h '+
CAST(datediff(n, '02-21-2012 00:00', '02-22-2012 01:01')%60 AS VARCHAR(2))+'m'
如果您想要有前导零,除了
强制转换
之外,还必须使用
。为了使查询更容易阅读,我省略了这个

SELECT [day] = Datediff(dd, st, et),
       [hour] = Datediff(hh, st, et) % 24,
       [minute] = Datediff(n, st, et) % 60
FROM   (SELECT st = CONVERT(DATETIME, '02-21-2012 00:00'),
               et = CONVERT(DATETIME, '02-22-2012 01:01')) tbl  
如果您想要有前导零,除了
强制转换
之外,还必须使用
。为了使查询更容易阅读,我省略了这个

SELECT [day] = Datediff(dd, st, et),
       [hour] = Datediff(hh, st, et) % 24,
       [minute] = Datediff(n, st, et) % 60
FROM   (SELECT st = CONVERT(DATETIME, '02-21-2012 00:00'),
               et = CONVERT(DATETIME, '02-22-2012 01:01')) tbl  
我只是不喜欢多次输入'02-21-2012 00:00'


我只是不想多次输入'02-21-2012 00:00'。

首先获取时间间隔之间的分钟数,您必须找到99d 99h 99m格式的时间间隔。我只是对mintues进行硬编码,因此您的查询将是:

declare @minutes int = 5690

select cast(@minutes/(24*60) as varchar(10))+'d '+cast((@minutes%(24*60))/60 as varchar(10))+'h '+cast((@minutes%(24*60))%60 as varchar(10))+'m'

首先获取时间间隔之间的分钟数,您必须找到99d 99h 99m格式的时间间隔。我只是对mintues进行硬编码,因此您的查询将是:

declare @minutes int = 5690

select cast(@minutes/(24*60) as varchar(10))+'d '+cast((@minutes%(24*60))/60 as varchar(10))+'h '+cast((@minutes%(24*60))%60 as varchar(10))+'m'

谢谢你,这对我有用。但第二行不应该是“d”,而应该是“h”。我试图编辑,但无法保存,因为我必须编辑至少6个字符。谢谢你,这对我很有效。但第二行不应该是“d”,而应该是“h”。我试图编辑,但无法保存,因为我必须编辑至少6个字符。