Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 The datediff function resulted in an overflow  [new]
mvn3
Member

Откуда:
Сообщений: 187
Всем привет,
Пытаюсь выполнить вот такой простой запрос

select 
	* 
from SomeTable t1
left hash join OtherTable2 t2 on t2.id = t1.Id and t2.someFiled >= '2011-01-01'


Получаю в результате:
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.

Поле t2.someFiled это datetime, ребят, подскажите плз как побороть эту ошибку
5 фев 14, 19:30    [15524812]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Glory
Member

Откуда:
Сообщений: 104760
mvn3
подскажите плз как побороть эту ошибку

Ваши SomeTable и OtherTable2 - это наверное представления ? В которых наверное есть функция datediff ?
5 фев 14, 19:35    [15524837]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

Откуда:
Сообщений: 187
да это view
5 фев 14, 19:36    [15524841]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

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

да это views, но datediff-a в определении их нет
5 фев 14, 19:38    [15524849]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Glory
Member

Откуда:
Сообщений: 104760
mvn3
да это view

Значит читайте сообщение и делайте то, что там написано
5 фев 14, 19:39    [15524852]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Glory
Member

Откуда:
Сообщений: 104760
mvn3
Glory,

да это views, но datediff-a в определении их нет

Если вы его не видите, это не значит, что его нет.
5 фев 14, 19:39    [15524855]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

Откуда:
Сообщений: 187
Glory
mvn3
да это view

Значит читайте сообщение и делайте то, что там написано


Ну, там написано что попробуйте использовать datediff функцию с меньшей точностью,

select * from SomeView v1
left hash join OtherView2 v2 on v2.id = v1.Id and CONVERT(DATE,v2.someFiled) >= '2011-01-01'


Результат тот же ... :(
5 фев 14, 19:49    [15524891]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
o-o
Guest
где-то во вьюхе считается разница в миллисекундах от рождества христова до начала олимпиады в сочи.
сервер говорит, переполнение, считайте в годах что-ли. ну или в днях, накрайняк.

15524855
5 фев 14, 19:54    [15524912]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Glory
Member

Откуда:
Сообщений: 104760
mvn3
Результат тот же ... :(

Интересно, а где исправили то вызов datediff то ?
5 фев 14, 19:55    [15524919]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

Откуда:
Сообщений: 187
Я только недавно начал работать с SQL Server, поэтому сорри за глупые вопросы...

Но вот эта конструкция работает нормально

select * from SomeView v1
left hash join OtherView2 v2 on v2.id = v1.Id and datediff(dd, v2.someFiled) >= '2011-01-01'
5 фев 14, 20:20    [15524997]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
datediff
Guest
это не может работать
mvn3
datediff(dd, v2.someFiled)

это будет ругаться
The datediff function requires 3 argument(s).
5 фев 14, 20:25    [15525007]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

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

А ну да, конечно,

( datediff(dd, v.start_date, @aDateEnd) >= 1 )


Вот только один вопрос, ребят, есть какие-нибудь идеи почему эта конструкция работает нормально, а простое сравнение - нет?
Подскажите плз, или киньте направление где можно почитать.
6 фев 14, 11:59    [15527370]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Glory
Member

Откуда:
Сообщений: 104760
mvn3
Вот только один вопрос, ребят, есть какие-нибудь идеи почему эта конструкция работает нормально, а простое сравнение - нет?

Что такое "простое сравнение" ? И какое отношенеи оно имеет к datediff ?
6 фев 14, 12:00    [15527387]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а может вы таки свой код покажите ?
6 фев 14, 12:02    [15527399]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

Откуда:
Сообщений: 187
Maxx
а может вы таки свой код покажите ?


Писал вот такой запрос к view

GO
BEGIN
declare 
	@aDateFrom DATE = '2011-01-01 09:00:00.000',
	@aDateTo DATE = '2011-01-30 09:00:00.000';


select	
        *
from vEmployee vEmpl
left hash join dbo.vVacation vi on vi.employee_registry_id = vEmpl.EmployeeId 
      and vEmpl.[the_Date] between vi.vacation_begin and vi.vacation_end
      and vi.vacation_end >= @aDateFrom
      where vEmpl.the_Date BETWEEN @aDateFrom AND @aDateTo

END;


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

The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.

После того как закоментил строку
 and vi.vacation_end >= @aDateFrom


Все стало работать нормально.

Далее меняю
and vi.vacation_end >= @aDateFrom
на
and ( datediff(dd, vi.vacation_end, @aDateFrom) >= 1 )

все работает.
Вот для меня и загадка почему 1-я конструкция не работает, а вторая - работает
6 фев 14, 12:26    [15527626]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Glory
Member

Откуда:
Сообщений: 104760
mvn3
Вот для меня и загадка почему 1-я конструкция не работает, а вторая - работает

Потому что создатель представлений(возможно вычисляемого столбца таблицы) не учел, что функция datediff может генерировать ошибку переполнения
6 фев 14, 12:31    [15527684]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
mvn3,

в курсе, что тип DATE времени не имеет?
6 фев 14, 13:00    [15527951]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

Откуда:
Сообщений: 187
Спасибо всем за ответы, т.е. правильно ли я понимаю, вызов конструкции (поле vacation_end - это datetime)
and vi.vacation_end >= @aDateFrom на самом деле SQL Server-ов преобразуется в конструкцию вот такого вида:
datediff(ms, vi.vacation_end, @aDateFrom) >= 1 (точность в миллисекундах) ввиду того что datediff пытается преобразовать это в int происходит переполнение и выводиться ошибка.

Соответственно если я модифицирую это с точностью до дней datediff(dd, vi.vacation_end, @aDateFrom) >= 1 то все работает корректно.

Верно?
6 фев 14, 13:13    [15528073]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
Glory
Member

Откуда:
Сообщений: 104760
mvn3
and vi.vacation_end >= @aDateFrom на самом деле SQL Server-ов преобразуется в конструкцию вот такого вида:
datediff(ms, vi.vacation_end, @aDateFrom) >= 1 (точность в миллисекундах) ввиду того что datediff пытается преобразовать это в int происходит переполнение и выводиться ошибка.

Нет
Еще раз - в ваших представлениях/таблицах есть _явно написанный_ вызов функции datediff
В который передаются такие пареметры, которые вызывают преполнение
6 фев 14, 13:15    [15528089]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
mvn3
Соответственно если я модифицирую это с точностью до дней datediff(dd, vi.vacation_end, @aDateFrom) >= 1 то все работает корректно.
Это вам просто повезло, что сервер выбрал такой план запроса, при котором переполнения не происходит.

Посмотрите ваши вьюхи (возможно, они вложенные), ищите DATEDIFF
6 фев 14, 15:39    [15529345]     Ответить | Цитировать Сообщить модератору
 Re: The datediff function resulted in an overflow  [new]
mvn3
Member

Откуда:
Сообщений: 187
да действительно, вы были правы, проваливается другая въюха очень хорошо была запрятана (мало того еще на линкованом сервере).
Всем спасибо за ответы
7 фев 14, 18:35    [15536495]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить