Вам не хватает апострофов:
SELECT 2015-10-25 AS First,
2015-12-27 AS Second,
CAST(2015-10-25 As DateTime) AS [First as datetime],
CAST(2015-12-27 As DateTime) AS [Second as datetime],
DATEDIFF(MONTH, 2015-10-25, 2015-12-27) AS WrongResult,
DATEDIFF(MONTH, '2015-10-25', '2015-12-27') AS CorrectResult
Результаты:
First Second First as datetime Second as datetime WrongResult CorrectResult
1980 1976 04.06.1905 00:00:00 31.05.1905 00:00:00 -1 2
SQL Server смотрит на 2015-10-25
как int - результат математического выражения (1980).
Использование int
в datetime
функциях заставляет SQL Server неявно преобразовывать значение int
в значение DateTime
.
Значение int
представляет количество дней, прошедшее с '1900-01-01'
- и поскольку второй аргумент приводит к меньшему значению int, вы получаете отрицательное число.
Как писал в своем комментарии Йерун Мостерт: «Гоча за книги».