Member 12926744 Ответов: 1

Получить время в час:мин:сек


Всем Привет,

У меня есть sql-запрос, чтобы узнать сверхурочную работу из двух datetime. Это прекрасно работает .Но мне нужно получить время в hr:min:sec теперь оно идет в hr:min.Кто-нибудь может мне помочь, пожалуйста.Любая помощь будет очень признательна.

Что я уже пробовал:

case when CONVERT(varchar(6),DATEDIFF(second,010_05, 010_06)/3600) + ':' + RIGHT('0' + CONVERT(varchar(2), (DATEDIFF(second, 010_05, 010_06) % 3600) / 60), 2) + ':' + RIGHT('0' + CONVERT(varchar(2), DATEDIFF(second,010_05, 010_06) % 60), 2) >'8:30:00' then convert(char(5),cast(IN010_06 - dateadd(hour,8,DATEADD(MINUTE,30,010_05)) as time), 108) else '00:00' end as overtime

1 Ответов

Рейтинг:
2

OriginalGriff

Не делай этого так! Когда вы сравниваете строки, он выполняет сравнение символов по символам, и результат всего сравнения основан на первых различных символах, которые он находит.
Поэтому, если кто-то работает сверхурочно 10 часов, вы в конечном итоге сравните "10:00:00" с "8:30:00", и результат будет неправильным - поскольку "1" стоит перед "8" в наборе символов, "10:00:00" меньше, чем "8:30:00". И это будет очень раздражать ваших работников...

Вместо того чтобы тратить свое время на преобразование вещей в стиринги и возню с ними, получите разницу в общем количестве секунд в виде целого числа и сравните ее непосредственно с 8 часами, 30 минутами в виде секунд: > 30600 (8 * 60 * 60 + 30 *60 + 0).
SQL выглядит более аккуратным и читаемым, и он менее подвержен ошибкам.

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