查询 Datediff 以在 SQL 服务器中输出 HH:MM

Query Datediff to output HH:MM in SQL Server

我正在使用 SQL Server 2012,我有两列 startendvarchar(5) 值采用 HH:MM 格式。

数据是这样的

ID    Start       End
------------------------
1     00:00       06:00
2     06:00       16:00
3     16:00       18:00
4     18:00       24:00

我的查询是这样的:

SELECT
    a.start,
    a.[end],
    RIGHT('0' + CONVERT(VARCHAR(3), DATEDIFF(MINUTE, a.Start, a.[end]) / 60), 2) + ':' +
    RIGHT('0' + CONVERT(VARCHAR(2), DATEDIFF(MINUTE, a.Start, a.[end]) % 60), 2) AS TotalHours 
FROM
    TransactionActivity a

我使用基于 ID 号的 where 子句执行查询,它给了我正确的结果,直到 ID 4:我得到了这样的错误

Conversion failed when converting date and/or time from character string.

我认为是因为结束时间值是24:00,我怎样才能得到时差?

我认为您最好将它们转换为完整的日期时间(使用任意日期),因为这样日期函数才能正常工作。

select
  a.[start]
  , a.[end]
  , RIGHT('0' + CONVERT(varchar(3),DATEDIFF(minute,a.[Start], a.[end])/60),2) + ':' +
    RIGHT('0' + CONVERT(varchar(2),DATEDIFF(minute,a.[Start],a.[end])%60),2)
    as TotalHours   
from (
  select id
    , case when [Start] = '24:00' then dateadd(minute, 1, convert(datetime, '23:59')) else convert(datetime, [Start]) end [Start]
    , case when [End] = '24:00' then dateadd(minute, 1, convert(datetime, '23:59')) else convert(datetime, [End]) end [End]
  from TransactionActivity
) a