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

Откуда:
Сообщений: 6
Подскажите, пожалуйста, как можно конвертировать секунды в
формат Дни.чч:мм:сс или чч:мм:сс (где более 24 часов, например 56:00:00)

Используя данную конвертацию, время более 24 часов начинает неправильно отображаться, например 194500 секунд отображаются в виде 06:01:40
,CONVERT(time(0), DATEADD(s, DurationS, 0), 114)as [Время в движении]
4 окт 17, 11:15    [20841362]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация секунд в дни.чч:мм:сс или чч:мм:сс более 24 часов  [new]
aleks222
Guest
select d = 194500/(24*60*60), h = 194500%(24*60*60)/(60*60), m = 194500%(60*60)/(60), s = 194500%(60)


строку то сам сляпаешь?
4 окт 17, 11:34    [20841444]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация секунд в дни.чч:мм:сс или чч:мм:сс более 24 часов  [new]
RC88
Member

Откуда:
Сообщений: 6
,REPLACE(STR(DurationS/3600)+':'+STR(DurationS%3600/60)+':'+STR(DurationS%60),' ','')

А вот делая таким способом время преобразовывается нормально, но некрасиво, без 0.
Как-нибудь можно преобразовать, чтобы 0 добавлялся?
54:1:40 ->54:01:40
22:40:1 ->22:40:01
22:8:5 - >28:08:05
4 окт 17, 11:39    [20841471]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация секунд в дни.чч:мм:сс или чч:мм:сс более 24 часов  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 424
DECLARE 
  @d1 DATETIME = DATEADD( HOUR, -56, GETDATE() ),
  @d2 DATETIME = DATEADD( SECOND, 3, GETDATE() )
DECLARE 
  @d3 DATETIME = @d2 - @d1

SELECT
  CONVERT( VARCHAR, DATEDIFF( DAY, '19000101', @d3 ) ) + '.' + SUBSTRING( CONVERT( VARCHAR, @d3, 120 ), 12, 8 )

Я бы так сделал, лишь бы с ведущими нулями не морочиться.
4 окт 17, 11:40    [20841472]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация секунд в дни.чч:мм:сс или чч:мм:сс более 24 часов  [new]
aleks222
Guest
RC88
,REPLACE(STR(DurationS/3600)+':'+STR(DurationS%3600/60)+':'+STR(DurationS%60),' ','')

А вот делая таким способом время преобразовывается нормально, но некрасиво, без 0.
Как-нибудь можно преобразовать, чтобы 0 добавлялся?
54:1:40 ->54:01:40
22:40:1 ->22:40:01
22:8:5 - >28:08:05


select right( '0' + cast( 1 as nvarchar(16) ), 2 )
4 окт 17, 11:42    [20841478]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация секунд в дни.чч:мм:сс или чч:мм:сс более 24 часов  [new]
iap
Member

Откуда: Москва
Сообщений: 44570
RC88
,REPLACE(STR(DurationS/3600)+':'+STR(DurationS%3600/60)+':'+STR(DurationS%60),' ','')

А вот делая таким способом время преобразовывается нормально, но некрасиво, без 0.
Как-нибудь можно преобразовать, чтобы 0 добавлялся?
54:1:40 ->54:01:40
22:40:1 ->22:40:01
22:8:5 - >28:08:05
Заменили пробелы на пустую строку, а могли бы на '0'. Вот и были бы лидирующие нули...
,REPLACE(STR(DurationS/3600),' ','')+':'+REPLACE(STR(DurationS%3600/60,2)+':'+STR(DurationS%60,2),' ','0')
Только нули у часов так не получаются, ибо в часах может быть более двух цифр, и в этом случае лидирующий 0 как бы не нужен
4 окт 17, 11:49    [20841505]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация секунд в дни.чч:мм:сс или чч:мм:сс более 24 часов  [new]
RC88
Member

Откуда:
Сообщений: 6
iap,

Огромное вам Спасибо!
4 окт 17, 12:03    [20841578]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить