Sql 从两个给定时间以hh:mm格式获取时间的更好选项

Sql 从两个给定时间以hh:mm格式获取时间的更好选项,sql,sql-server,sql-server-2008,time,Sql,Sql Server,Sql Server 2008,Time,输出:9:31 我们是否有任何其他功能,我可以缩短上述脚本。另外,我应该怎么做才能将输出设置为09:31而不是9:31?您可以在Sql Server中使用函数 更新-(示例):这可能是您想要的: select cast(datediff(minute,convert(time,'09:35 AM'), convert(time,'07:06 PM'))/60 as varchar) +':'+cast(datediff(minute,convert(time,'09:

输出
9:31

我们是否有任何其他功能,我可以缩短上述脚本。另外,我应该怎么做才能将输出设置为
09:31
而不是
9:31

您可以在Sql Server中使用函数

更新-(示例):这可能是您想要的:

select cast(datediff(minute,convert(time,'09:35 AM'),
       convert(time,'07:06 PM'))/60 as varchar)
       +':'+cast(datediff(minute,convert(time,'09:35 AM'),
       convert(time,'07:06 PM'))%60 as varchar)
RIGHT('00' + str, 2)
您可以使用样式114获得
HH:mm

select FORMAT(CONVERT(datetime,'9:31'),'HH:mm') AS 'time'

编辑

作为注释,以避免使用日期时间算法

SELECT 
    CONVERT(nvarchar(5), 
        -- Get difference of time
        CONVERT(datetime,'07:06 PM') - CONVERT(datetime,'09:35 AM')
        , 114)
声明和/或转换为
VARCHAR
类型时,应指定长度,否则SQL Server将为您指定默认值。有时是
1
,有时是
30
。有关更多信息,请参见此

此外,要将差异格式化为
hh:mm
,您需要在字符串中填入适当的零。这是通过以下方式实现的:

DECLARE @time1 AS VARCHAR(8) = '09:35 AM'
DECLARE @time2 AS VARCHAR(8) = '07:06 PM'
    
SELECT 
    time1   = CAST(@time1 AS TIME), 
    time2   = CAST(@time2 AS TIME),
    diff    = DATEDIFF(MINUTE, @time1, @time2),
    hh      = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))/60 AS VARCHAR(2)), 2),
    mm      = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))%60 AS VARCHAR(2)), 2),
    final   = RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))/60 AS VARCHAR(2)), 2) + ':' +
              RIGHT('00' + CAST(DATEDIFF(MINUTE, CAST(@time1 AS TIME), CAST(@time2 AS TIME))%60 AS VARCHAR(2)), 2)

只要试试这个广告,看看这是不是你想要的:

select cast(datediff(minute,convert(time,'09:35 AM'),
       convert(time,'07:06 PM'))/60 as varchar)
       +':'+cast(datediff(minute,convert(time,'09:35 AM'),
       convert(time,'07:06 PM'))%60 as varchar)
RIGHT('00' + str, 2)


该版本的
格式仅在SQL Server 2012中引入。问题列在sql-server-2008下。我的查询似乎比您的短:)是的,但这并不意味着您的更好。更短并不总是等于更短。我刚刚纠正了您的
VARCHAR
转换。
SELECT (CONVERT(VARCHAR(5), GETDATE(), 114))