2013-08-05 5 views
0

У меня есть таблица элементов с полем даты DataNa.Функция даты - Ошибка в sql

Я хотел бы сделать запрос как:

Select DateDiff (year, datana, dateserial (year,12,31)) as years, .... 
from members ... etc ... 

год является параметрическим значение. Но система сообщает мне, что DateSerial не является признанным значением имени функции по умолчанию.

Я также попытался сделать:

Select DateDiff (year, datana, datevalue ('31/12/' + year)) as years, .... 
from members ... etc ... 

Он говорит, что также не DateValue признал имя функции по умолчанию

Я использую SQL Server 2008R2

+2

Что вы хотите достичь? – jpw

+0

какой формат год? –

ответ

2

ли вы ищете что-то подобное?

SELECT DATEDIFF(YEAR, datana, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, -1)) years 
    FROM members 

Эта часть

DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, -1) 

возвращает последний день текущего года (например 2013-12-31)

Вот SQLFiddle демо

+0

, так почему бы вам выбрать последнюю дату прошлого года? Неважно, в какой день года вы выбираете, используя latiff (year, x, y) –

1

Если вы хотите создать 31 -12-YYYY из параметра @Year int для YYYY - вы можете сделать это следующим образом:

DATEADD(DD,-1,DATEADD(YY,@year - 1899,0)) 

Но если вы хотите, чтобы получить разницу в годах между двумя датами - это не важно иметь это 31.12, 1.1 того же года даст одинаковый результат, который вы можете получить с:

SELECT DATEDIFF (YEAR, datana, DATEADD(YY,@year - 1900,0)) 

SQLFiddleDEMO

+0

Танки далеко все. Но функция DateSerial есть SqlServer2088R2 ?? – Antony

+0

@ Antony No. Функция не выходит. SQL Server 2012 представил нечто подобное с функцией DATEFROMPARTS, но в 2008R2 вам нужно использовать альтернативы, как показано. –

+0

Я понял Спасибо за всех – Antony

Смежные вопросы