2009-08-24 3 views
2

Это не должно быть так сложно. Я просто необходимо следующее:Первый день следующего года для SQL Server?

SET @DueDate = CONVERT (DATETIME, '01/01/2010') 

Однако, мне это нужно прагматично, так что если бы это было марта 2010 года, дата дал бы '01/01/2011' .

Я знаю, что это просто, но мой мозг не подходит. Я уверен, что это с DateAdd и getdate().

ответ

7

Число летних границ между нулем и годом не более одного (31 декабря 1899 года), добавьте обратно.

SELECT DATEADD(year, DATEDIFF(year, -1, GETDATE()), 0) 

Попытаемся дату в следующем году, чтобы получить 2011, потому что 1 января 2010 является начало следующего года в 2009 году ...

SELECT DATEADD(year, DATEDIFF(year, -1, '2010-03-21'), 0) 
+0

Фактически, это возвращает '1/2/2010'. :) – DavidStein

+0

Вторая работала. Благодарю. – DavidStein

0

Возможно, создать таблицу с первым из дат года, затем выберите наименьшее, которое больше вашей даты.

Возможно, просто поместите строку вместе, '01/01 '+ (MyYear + 1)?

2

на основе базы данных журнала статьи: How to Calculate Different SQL Server Dates:

Первый день Следующая года

я использую год интервал (YY), чтобы отобразить первый день следующего года ,

выберите DATEADD (YY, DATEDIFF (уу, -1, GETDATE()), 0)

+0

Спасибо, но не должно быть: выберите DATEADD (yy, DATEDIFF (yy, -1, getdate()), 0) то же, что и выше для следующего года? – DavidStein

+0

Да. Как сообщалось, это был первый день этого * года. Я сделаю изменения. –

0

Вы можете добавить один к текущему году, то CONCAT с Яном 01, а затем преобразовать обратно в дата:

select CONVERT(datetime, CONVERT(VARCHAR(20), YEAR(GETDATE())+1) + '.01.01') 
0

Используя некоторые части указанных вами примеров можно также сделать это. Теперь это предполагает, что ваш приемлемый формат даты совпадает с M-d-yyyy.

DATEADD(year, 1,'1-1-'+convert(varchar,DATEPART(YYYY,GetDate()))) 

Примечание: Вы получаете текущую дату, получить год часть, создать строку, которая преобразует дату, затем добавьте в год.

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