SQL Server: функция datediff привела к переполнению

Как Вы говорят, необходимо показать некоторый код. :-)

ошибка переполнения стека А обычно происходит когда Ваше вложенное множество вызовов функции слишком глубоко. Посмотрите Гольф Кода Переполнения стека поток для некоторых примеров того, как это происходит (хотя в случае того вопроса, ответы намеренно вызывают переполнение стека).

7
задан 13 August 2009 в 23:34
поделиться

2 ответа

SQL Server, возможно, выполняет внутренний DATEDIFF для сравнения, и если между двумя датами намного больше 68 лет (а внутреннее значение DATEDIFF составляет секунды), DATEDIFF может вызвать ошибку, так как вывод DATEDIFF является INT.

Я сталкивался с этим раньше (используя DATEDIFF напрямую) и разрешил преобразование DATETIME в DECIMAL следующим образом:

DECLARE @d1 DATETIME
DECLARE @d2 DATETIME

DECLARE @n1 AS DECIMAL(38,20)
DECLARE @n2 AS DECIMAL(38,20)

SET @d1 = '2 Jan 2000 00:00:02'
SET @d2 = '1 Jan 2000 00:00:00'

-- @n1 and @n2 will hold the datetime in fractional form. The integer part
-- is the #days since 1 Jan 1900, whilst the fractional part is the time in
-- 1/86400's of a second (24 hours = 86400 seconds, so a fraction of 0.5
-- represents 12:00:00 noon precisely.
SELECT @n1 = CAST(@d1 AS DECIMAL(38,20)), @n2 = CAST(@d2 AS DECIMAL(38,20))

-- Now manipulate the fractional and integer parts of the time
-- to get the final seconds difference.
SELECT CAST(86400 AS DECIMAL(38,20)) * (@n1 - @n2)
12
ответ дан 6 December 2019 в 10:52
поделиться

Всем спасибо за указатели!

Они заставили меня перепроверить vSomeView, и оказалось, что vSomeView выполнял соединение между представлением и некоторыми другими таблицами. Это представление выполняло датировку для преобразования некоторой даты и времени в метку времени в стиле posix (секунды с эпохи). Как только я его удалил, запрос работает нормально.

2
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: