Столбец DateAdd вызвал переполнение - PullRequest
5 голосов
/ 03 февраля 2012

После выполнения следующего запроса я получаю ошибку

Добавление значения в столбец datetime привело к переполнению.

Понятия не имею, почему это происходит, поскольку в течение нескольких недель все работало без сбоев. Я просто пытаюсь добавить здесь даты и сравнить их с датой начала и окончания с предложением between.

DATEADD(day, -1 , DATEADD(mm, DATEDIFF(mm,0,posting_date),0)) BETWEEN start_date and end_date

Ответы [ 2 ]

7 голосов
/ 03 февраля 2012

Я могу продублировать ошибку следующим образом:

declare @posting_date datetime
set @posting_date = '1/1/1753'

select DATEADD(day, -1 , DATEADD(mm, DATEDIFF(mm,0,@posting_date),0)) 

ошибка после запуска:

Сообщение 517, уровень 16, состояние 1, строка 3 Добавление значения кстолбец «datetime» вызвал переполнение.

По сути, posting_date в приведенном выше случае - это минимальное значение даты и времени, разрешенное SQL-сервером.Если затем попытаться вычесть из него 1 день, то он входит в условие переполнения.

Я предполагаю, что у вас есть точка данных, для которой установлено минимальное значение даты SQL Server .

2 голосов
/ 03 февраля 2012

Согласно MSDN:

Аргумент даты не может быть увеличен до значения вне диапазона его типа данных.В следующих инструкциях числовое значение, которое добавляется к значению даты, превышает диапазон типа данных даты.Возвращается следующее сообщение об ошибке: «Добавление значения в столбец« datetime »вызвало переполнение».

Каков тип данных столбца и диапазоны start_date и end_date?

...