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

Откуда:
Сообщений: 990
Есть количество секунд начиная от даты 00010101 00:00:01, например "63684865306" секунд, как можно имея этот параметр получить дату+время? SQL 2017. Спасибо.
17 июл 19, 17:25    [21928808]     Ответить | Цитировать Сообщить модератору
 Re: Конвертировать количество секунд в DateTime2  [new]
Pvase
Member

Откуда:
Сообщений: 990
Пробовал так:
SELECT DATEadd(second,63684865306,DATETIME2FROMPARTS ( 1, 1, 1, 0, 0, 0, 0, 1 ))


Но получил в ответ ошибку: Ошибка арифметического переполнения при преобразовании expression к типу данных int.
17 июл 19, 17:27    [21928811]     Ответить | Цитировать Сообщить модератору
 Re: Конвертировать количество секунд в DateTime2  [new]
vikkiv
Member

Откуда: London
Сообщений: 2704
Pvase,

select dateadd(second,75,cast('0001-01-01'as datetime2)) as d
17 июл 19, 17:38    [21928823]     Ответить | Цитировать Сообщить модератору
 Re: Конвертировать количество секунд в DateTime2  [new]
vikkiv
Member

Откуда: London
Сообщений: 2704
vikkiv,

DateTime2
Date range 0001-01-01 through 9999-12-31
January 1,1 CE through December 31, 9999 CE
17 июл 19, 17:39    [21928824]     Ответить | Цитировать Сообщить модератору
 Re: Конвертировать количество секунд в DateTime2  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36987
SELECT DATEadd(dd,63684865306/60/60/24,DATETIME2FROMPARTS ( 1, 1, 1, 0, 0, 0, 0, 1 ))

Ну и надо еще прибавить к результату (63684865306 - 63684865306/60/60/24) секунд.

UPD:

Как-то так:

declare
    @seconds    bigint  = 63684865306
declare
    @days       int     = @seconds / 60 / 60 / 24
declare
    @remainder  int     = @seconds - cast(@days as bigint) * 60 * 60 * 24


select @seconds, @days, @remainder
SELECT dateadd(second, @remainder, DATEadd(dd,@days,DATETIME2FROMPARTS ( 1, 1, 1, 0, 0, 0, 0, 1 )))


Сообщение было отредактировано: 17 июл 19, 17:48
17 июл 19, 17:39    [21928825]     Ответить | Цитировать Сообщить модератору
 Re: Конвертировать количество секунд в DateTime2  [new]
Pvase
Member

Откуда:
Сообщений: 990
Гавриленко Сергей Алексеевич

Спасибо, вот что получилось одной строкой:
SELECT dateadd(second, 63684865306 - cast(63684865306 / 60 / 60 / 24 as bigint) * 60 * 60 * 24, DATEadd(dd,63684865306 / 60 / 60 / 24,DATETIME2FROMPARTS ( 1, 1, 1, 0, 0, 0, 0, 1 )))
18 июл 19, 08:56    [21929095]     Ответить | Цитировать Сообщить модератору
 Re: Конвертировать количество секунд в DateTime2  [new]
Владислав Колосов
Member

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

рассчитайте константой количество секунд от даты 00010101 00:00:01 до 01-01-1900, например, и возьмите точку отсчета 01-01-1900. Выражение упростится.
18 июл 19, 11:29    [21929247]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить