Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Форматирование продолжительности события или аналог mysql sec_to_time  [new]
staseg
Guest
Привет!

Мне нужно измерять продолжительность чего-то, разницу между двумя datetime. видеть это нужно в человекочитаемом виде hh:mm:ss. Если продолжительность более суток, следует добавить поле с днем, если больше месяца - с месяцем и т.д.

В крайнем случае пойдет аналог sec_to_time, который превращает секунды во время, в котором при необходимости поле часов может содержать >23.
16 дек 11, 18:50    [11779985]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
staseg
разницу между двумя datetime. видеть это нужно в человекочитаемом виде hh:mm:ss
найдите разницу в секундах посредством datediff и отдайте клиентскому приложению
и пусть оно уже представит отобразит юзеру как хочет
16 дек 11, 18:54    [11780009]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
staseg
Guest
Паганель,

Мое приложение (в нем бОльшая часть бизне-логики системы) генерирует sql-запросы, которые отдает клиентскому приложению, который их выполняет и знать не знает о том, что столбец X является продолжительностью. Я читал "часто задаваемые вопросы" в этой ветке. Нужно форматировать дату в запросе...
16 дек 11, 18:59    [11780042]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
staseg
отдает клиентскому приложению, который их выполняет и знать не знает о том, что столбец X является продолжительностью
хреново
16 дек 11, 19:06    [11780107]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
staseg
Guest
Перед тем как создавать тему я поизучал msdn и честно говоря был шокирован скудными возможностями mssql форматировать даты, а convert с его магическими константами меня просто убил :)

Но ведь наверное можно написать (и, уверен, уже написано) процедуру, которая бы форматировала именно продолжительность, а не дату. В мсдн наткнулся на какой-то тип datetimeoffset, но как его применить и тем более отформатировать - не соображу... Вычисление секунд между двумя датами конечно сразу нашел и сделал - отсюда и встал вопрос о возможном применении аналога mysql sec_to_time.
16 дек 11, 19:18    [11780180]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
staseg
Guest
Механизм проброса в клиентское приложение еще и типа колонок сделать очень просто, но не хочется перегружать ни конфиги, ни клиента лишней информацией.
16 дек 11, 19:21    [11780188]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
Glory
Member

Откуда:
Сообщений: 104751
staseg
Вычисление секунд между двумя датами конечно сразу нашел и сделал - отсюда и встал вопрос о возможном применении аналога mysql sec_to_time.

Ну так создайте такой аналог
16 дек 11, 21:22    [11780590]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
staseg
Guest
Glory,

>Ну так создайте такой аналог

Я слабенько знаю SQL, MSSQL вообще недавно увидел. Я бы не пришел сюда с вопросом, не постарайся я решить его самостоятельно... Сегодня зафигачил запрос с курсором с немного нетривиальной выборкой, получил кучу экспириенса и левел-ап! :) Но с датами я полдня прокуковал и так и не сообразил решения...

Кстати, уже после вопроса сюда помозговали с коллегой и пришли к выводу, что промежутки можно считать за время (чч:мм:сс), дни и года - месяцами считать криво из-за разности дней в месяце, в случае годов погрешностью в один день за несколько лет можно пренебречь.

В общем я и пришел сюда за помощью, как отформатировать промежуток времени на tsql, с готовым примером (пусть и очень неполным!) я поиграюсь, доделаю под наши нужды и с подобным вопросом больше не полезу.
16 дек 11, 23:29    [11781054]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Что тут считать? Это же элементарная арифметика.
declare @d1 datetime = '20091201 12:00:03', @d2 datetime = '20111216 14:42:37';

with df (d) as
(
 select datediff(second, @d1, @d2)
)
select
 d / 86400 as [Дней],
 (d % 86400) / 3600 as [Часов],
 ((d % 86400) % 3600) / 60 as [Минут],
 ((d % 86400) % 3600) % 60 as [Секунд]
from
 df;
17 дек 11, 00:11    [11781177]     Ответить | Цитировать Сообщить модератору
 Re: Форматирование продолжительности события или аналог mysql sec_to_time  [new]
staseg
Guest
invm, спасибо! Вот банально пересчитать из секунд я и не догадался :)
19 дек 11, 10:12    [11786928]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить