2010-02-23 96 views
10

假设我有90秒。如果我想要显示的结果分钟,第二方面,我用在sql server 2005中将秒转换为分钟和秒的有效方法

select Time= '0' + CAST(90/60 as varchar(2)) + ':' + CAST(90%60 as varchar(2)) 

输出是

时间
01:30

我已经追加做0(零),因为如果你做一个select getdate()输出将是

yyyy-mm-dd hh:mm:ss:ms

做这种转换的标准方式和推荐做法是什么?

感谢

回答

23

随着时间:

SELECT CONVERT(CHAR(8),DATEADD(second,90,0),108) 
00:01:30 

忽略时间:

SELECT RIGHT(CONVERT(CHAR(8),DATEADD(second,90,0),108),5) 
01:30 
+0

这是伟大的..但它也呈现小时领域。我只需要mm:ss。我应该如何使用权利SELECT right(CONVERT(CHAR(8),DATEADD(second,90,0),108),5)。或者有任何标准方式 – 2010-02-23 05:39:21

+0

是的,当您发布您的评论时,我正在进行编辑。 – 2010-02-23 05:41:17

+0

这不适用于秒数等于或多于一天的这些数据:SELECT CONVERT(CHAR(8),DATEADD(second,86400,0),108) – gotqn 2012-11-01 12:29:38

0

的第一件事情,我一个新的SQL数据库上做的就是添加一个类似于这一个Timespan功能(尽管我倾向于包括几天和几毫秒):

CREATE FUNCTION dbo.TimeSpan 
(
    @Hours int, 
    @Minutes int, 
    @Seconds int 
) 
RETURNS datetime 
AS BEGIN 
    RETURN DATEADD(SS, @Hours * 3600 + @Minutes * 60 + @Seconds, 0) 
END 

然后你就可以格式化这个,但是你想:

SELECT SUBSTRING(CONVERT(char(8), dbo.TimeSpan(0, 0, 90), 108), 4, 5) 

它看起来更为复杂在第一,但重用TimeSpan功能的能力随着时间的推移变得非常容易。对我来说,感觉像是总是写DATEADD调用0'1753-01-01'

+0

此解决方案仅适用于小数字。例如,如果你有82816秒比SELECT SUBSTRING(CONVERT(char(8),dbo.TimeSpan(0,0,82816),108),4,5)只返回16秒! – Dave 2016-11-01 19:53:56

3

试试这个:

select convert(varchar(10), dateadd(second, 15794, 0), 108) 
相关问题