查询 Datediff 以在 SQL 服务器中输出 HH:MM
Query Datediff to output HH:MM in SQL Server
我正在使用 SQL Server 2012,我有两列 start
和 end
,varchar(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
我正在使用 SQL Server 2012,我有两列 start
和 end
,varchar(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