Запрос Datediff для вывода ЧЧ: ММ в SQL Server - PullRequest
0 голосов
/ 04 декабря 2018

Я работаю с 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

Я выполняю запрос с предложением where на основе идентификационного номера, он дает мне правильный результат, пока в ID 4: я получил ошибку, подобную этой

Не удалось выполнить преобразование при преобразовании даты и / или времени из символьной строки.

Я думаю, что так как значение Конечного времени равно 24:00, как я могу его получить, чтобы получитьразница во времени?

1 Ответ

0 голосов
/ 04 декабря 2018

Я думаю, вам лучше преобразовать их в полные значения даты / времени (используя произвольную дату), потому что тогда функции даты будут работать правильно.

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
...