Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Cконвертить количество секунд в 'hh:mm:ss'  [new]
J.Serge
Member [скрыт]

Откуда:
Сообщений: 791
Дано: Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)
read-only account для запуска запросов для отчетов InfoMaker 8.0

Одно из полей в отчете - продолжительность текущего состояния. Запрос для данного поля возвращает продолжительность в секундах (используется DATEDIFF).
В отчете продолжительность в секундах преобразуется в формат hh:mm:ss (часы, минуты, секуды - уж извините, если в SQL Server другие буквы для этого используюся), кучей делений на 3600 и 60, сравнением длины результата с 1, конкатенациями с '0' и ':' - все понятно, но муторно.

Вопрос: возможно ли возвращать таким образом отформатированную строку из запроса? Тупо перенести упомянутое ручное форматирование из InfoMaker в запрос я могу. Проблема в том, что в запросе и так уже количество секунд берется не простым select'ом из поля в таблице, а двумя (потому что два union'а) DATEDIFF'ами с CASE'ом внутри, если внести туда еще и форматирование, код станет очень сложным и нечитаемым.

Существуют ли (полу-)стандартные функции или (полу-)стандартные способы решения моей задачи?
8 авг 09, 13:06    [7514021]     Ответить | Цитировать Сообщить модератору
 Re: Cконвертить количество секунд в 'hh:mm:ss'  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Если количество секунд между 0 и 86399, то вот один из способов:
declare @kolichestvo_sekund int
set @kolichestvo_sekund = 7200

select convert(char(8), dateadd(ss, @kolichestvo_sekund, 0), 108) as result

result
--------
02:00:00

(1 row(s) affected)
8 авг 09, 13:15    [7514031]     Ответить | Цитировать Сообщить модератору
 Re: Cконвертить количество секунд в 'hh:mm:ss'  [new]
J.Serge
Member [скрыт]

Откуда:
Сообщений: 791
Паганель, спасибо!
8 авг 09, 13:32    [7514042]     Ответить | Цитировать Сообщить модератору
 Re: Cконвертить количество секунд в 'hh:mm:ss'  [new]
step_ks
Member

Откуда:
Сообщений: 936
J.Serge

Проблема в том, что в запросе и так уже количество секунд берется не простым select'ом из поля в таблице, а двумя (потому что два union'а) DATEDIFF'ами с CASE'ом внутри, если внести туда еще и форматирование, код станет очень сложным и нечитаемым.

А что вам мешает поместить весь ваш сложный селект во from и преобразование уже совершить над одним полем?
8 авг 09, 16:02    [7514180]     Ответить | Цитировать Сообщить модератору
 Re: Cконвертить количество секунд в 'hh:mm:ss'  [new]
J.Serge
Member [скрыт]

Откуда:
Сообщений: 791
step_ks

А что вам мешает поместить весь ваш сложный селект во from и преобразование уже совершить над одним полем?

Толковое замечание, спасибо. Учтем на будущее.
9 авг 09, 11:20    [7514931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить