Как преодолеть странную ошибку при преобразовании BigInt в DateTime в SQL - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть то, что я думал, будет простым приведением / преобразованием, но я получаю странную ошибку.

Вот мой sql:

select CONVERT(datetime,1322510754374,104)

Но я получаю эту ошибку:

 Arithmetic overflow error converting expression to data type datetime.

Я тоже пробовал:

select cast(1322510754374 as datetime)

но я получаю ту же ошибку

который я пытаюсь выяснить. Есть ли другой способ конвертировать bigint в datetime?

Я ожидаю что-то вроде сегодняшней даты: 2011-11-29 17: 26: 52.257, но показанная мною информация относится к более раннему дню.

потому что мне нужно сравнить его с

 getDate()

Спасибо.

Ответы [ 2 ]

7 голосов
/ 30 ноября 2011

Хорошо, мое лучшее предположение, и оно обоснованное, состоит в том, что с 1 января 1970 года это в миллисекундах.

Вы не можете использовать такие большие числа в DATEADD и т. Д. Итак, есть два варианта ...

DECLARE @stupid BIGINT
SELECT  @stupid = 1322510754374

SELECT CAST(@stupid / 86400000.0 + 25567 AS DATETIME)

SELECT DATEADD(MILLISECOND, @stupid % 86400000, DATEADD(DAY, @stupid / 86400000, '1970-01-01'))

-- Both Give...  2011-11-28 20:05:54.373

Вам нужно как-то проверить это дважды, используя дату, которую вы ЗНАЕТЕ. Но мне кажется вполне вероятным ...


И скажи своему профессору, что я рад, что не работаю с таким чертовски бесполезным человеком.

Удачи тебе:)

0 голосов
/ 30 ноября 2011

Вы получаете это сообщение, потому что число в выписке слишком велико для преобразования в дату ... Самое большое число - 2958463, что равно 9999-12-31

Чтобы добавить к нему время, просто добавьте десятичное число к числу, например: 2958463.123

Если вы жестко кодируете число bigint, попробуйте сначала сделать его в обратном порядке, это даст вам bigint.

Это мое самое близкое утверждение к вашей дате:

select CONVERT(datetime, 40874.726, 104)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...