AnkurJain14 Ответов: 1

Преобразование секунд в формат "00: 00:00" - SQL server


У меня есть отчет, в котором я должен рассчитать общее количество отработанных часов любым сотрудником за неделю. Отчет отражает часы более 24 часов (или 86400 секунд). Я хочу преобразовать все секунды в формат "00: 00:00", сохраняя формат столбцов как datetime или time, чтобы я мог провести дальнейший анализ с помощью поля time.

Этот код дает мне то, что мне нужно, однако вышеизложенное преобразует секунды в INT в varchar, что не является тем, что мне нужно для отчета. Мне нужно, чтобы выходные данные были в формате datetime/time, который может дать мне такие результаты, как "40:00:00" для данного примера.
Я надеюсь, что смогу предоставить вам всю необходимую информацию. Пожалуйста, помогите, так как я борюсь с этим уже много дней.

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

Ниже приведено то, что я пробовал до сих пор:
Declare @WorkTimeInSeconds int
Set @WorkTimeInSeconds = 144000 --This value is an example. Mostly values are above 86400 seconds
Select ActualHoursWorked =       convert(varchar,(@WorkTimeInSeconds)/3600)
            + ':' + right( '0' + convert(varchar,((@WorkTimeInSeconds) %3600)/60),2)
            + ':' + right( '0' + convert(varchar,(@WorkTimeInSeconds) %60),2)

1 Ответов

Рейтинг:
2

OriginalGriff

Проблема в том, что 00:00:00 - это не формат даты и времени, а временной интервал. Значение даты и времени требует даты и также ограничено 23:59:99 в качестве компонента времени, поэтому вы не можете просто сказать: "90 909 секунд-это дата и время 25:15: 09", потому что это недопустимое значение даты и времени.
Я бы либо вернул его в виде NVARCHAR, либо в виде нескольких секунд, и пусть программа презентации разберется, что именно она хочет отобразить. (Или, возможно, как три отдельных значения INT, но это одинаково грязно).