SQL Server 2008查询中的分钟到hh:mm格式

时间:2016-03-17 13:52:44

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

我的表格中有一列Time。它以分钟为单位保存时间值,即:605。我希望它以10 {05格式显示为hh:mm格式。

我这样做:

...
Time = cast(AVG(Time) / 60 as varchar) + ':' + cast(AVG(Time) % 60 as varchar),
...

它显示的值为10:5,但是我想把它设为10:05,我找不到在分钟部分'5'之前添加'0'的方法。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:2)

试试这个:

SELECT 
  TIME =  CASE WHEN @t < 600 THEN '0' ELSE '' END + 
  CAST(Time / 60 as varchar(10)) + ':' +RIGHT(100 +(Time % 60), 2)

示例:

DECLARE @t int = 55121

SELECT 
  TIME =  CASE WHEN @t < 600 THEN '0' ELSE '' END + 
          CAST(@t / 60 as varchar(10)) + ':' +RIGHT(100 +(@t % 60), 2)

结果:

Time
918:41

答案 1 :(得分:1)

你可以简单地添加一个Right(&#39; 0&#39; + ...,2)表达式,如下所示,以获得&#39; 0&#39;在那里。

Time = cast(AVG(Time) / 60 as varchar) + ':' + RIGHT('0'+cast(AVG(Time) % 60 as varchar),2)

要在评论中回答您的问题,请获取DD:HH:MM是一种类似的设置。

DayTime = cast(AVG(Time) / 1440 as varchar) + ':' + RIGHT('0' + cast((AVG(Time) / 60) % 24 as varchar),2) + ':' + RIGHT('0'+cast(AVG(Time) % 60 as varchar),2)

答案 2 :(得分:0)

您可以使用case表达式执行此操作。

此外,您应始终在使用cast时指定varchar的长度,否则它只会显示第一个字符。

case when len(cast(AVG(Time)%60 as varchar(2))) < 2 then '0'+cast(AVG(Time)%60 as varchar(2))
else cast(AVG(Time)%60 as varchar(2))
end