Sql 查询中需要小时分钟和秒

Sql 查询中需要小时分钟和秒,sql,sql-server-2008,Sql,Sql Server 2008,我正在计算2次之间的时差,我想打印小时分钟和秒。谁能告诉我怎么做吗 我的问题 SELECT CONVERT(VARCHAR(8), DATEADD(ms, DATEDIFF(ms, CONVERT(VARCHAR(8), GETDATE(), 114), CONVERT(VARCHAR(8), VCTime, 114)), 0), 114) AS TImeDifference FROM Test 输出: TimeDifference --------------- 10

我正在计算2次之间的时差,我想打印小时分钟和秒。谁能告诉我怎么做吗

我的问题

SELECT 
    CONVERT(VARCHAR(8), DATEADD(ms, DATEDIFF(ms, CONVERT(VARCHAR(8), GETDATE(), 114), CONVERT(VARCHAR(8), VCTime, 114)), 0), 114) AS TImeDifference 
FROM
    Test
输出:

TimeDifference  
---------------
10:51:37    
20:51:37   
21:51:37   
22:21:37   
08:51:37   
00:51:37   
预期产出

TimeDifference  
---------------
10h:51m:37s    
20h:51m:37s   
21h:51m:37s   
22h:21m:37s   
08h:51m:37s   
00h:51m:37s   

你可以沿着下面的路走

    DECLARE @x int, 
        @dt1 smalldatetime = '2018-08-17 03:24:16', 
        @dt2 smalldatetime = getdate()

SET @x = datediff (s, @dt1, @dt2)


SELECT convert(varchar, @x / (60 * 60 * 24)) + ':'
+ convert(varchar, dateadd(s, @x, convert(datetime2, '0001-01-01')), 108)

这将返回1:05:57:00

一种方法是对
2008
使用子查询和连接运算符
+
,并使用
DATEPART
函数,如下所示:

SELECT (
    CAST(DATEPART(HOUR,(TImeDifference)) AS VARCHAR) + 'h:' +
    CAST(DATEPART(MINUTE,(TImeDifference)) AS VARCHAR) + 'm:' + 
    CAST(DATEPART(SECOND,(TImeDifference)) AS VARCHAR) + 's')
FROM(
SELECT 
    CONVERT(varchar(8), DATEADD(ms, DATEDIFF(ms, convert(varchar(8),getdate(),114), 
    convert(varchar(8),VCTime,114)), 0), 114) as TImeDifference 
    FROM test
) t

是的,我意识到
concat
是在
2012
中引入的,因此我们可以使用
+
来代替首先,您不应该转换为字符串来获得差异。我认为这应该是好的:

SELECT CONVERT(VARCHAR(8),
               DATEDIFF(ms, CAST(GETDATE() as TIME), CAST(VCTime as TIME)),
               114
              ) as TImeDifference 
FROM Test;
然后你要加上“h”、“m”和“s”。可以使用STUFF()函数。但是让我使用
APPLY
来实现这一点,这样代码看起来就不会那么凌乱了:

SELECT ( STUFF(STUFF(TimeDifference_str, 6, 0, 'm'), 3, 0, 'h') + 's' ) as TimeDifference_hms
FROM test t CROSS APPLY
     (VALUES (CONVERT(VARCHAR(8),
                      DATEDIFF(ms, CAST(GETDATE() as TIME), CAST(VCTime as TIME)),
                      114
                     )
             )
     ) v(TimeDifference_str)
试试这个:

select cast(date_diff / 3600 as varchar(4)) + 'h:' +  
       cast((date_diff % 3600) / 60 as varchar(4)) + 'm:' +
       cast(date_diff % 60 as varchar(4)) + 's'
from (
    select datediff(second, getdate(), VCTime) date_diff from my_table
) a

我在我的查询中得到了差异,我只需要知道如何在我的查询中显示H和Moutput@RedDevildatediffconcat函数中的hh:mm:ss没有逻辑生成的直接方法不在2008年是的,感谢您对此的快速响应,我有机会相应地更新答案。请检查更新后的答案。请注意:如果使用秒而不是毫秒和相应的格式说明符(108),则可以优化当前查询,将CONVERT(VARCHAR(10)、DATEADD(ss、DATEDIFF(ss、GETDATE()、VCTime)、0)、108)选择为时差,你正在以不同的方式得到你想要的,或者至少是以我的方式,但你仍然在等待更多的答案。即使您没有响应据说要检查和响应的答案。参数数据类型time对于dateadd函数的参数2无效。@REDDEVY。当然应该是
DATEDIFF()
“秒”不是可识别的DATEDIFF选项。DATEDIFF函数导致溢出。分隔两个日期/时间实例的DatePart数量太多。尝试将datediff与不太精确的datepart一起使用。