Как я могу получить дату первой секунды года с SQL? - PullRequest
6 голосов
/ 06 октября 2009

Я работаю над процедурой очистки в SQL Server 2005, которая должна удалить все строки в таблице старше 1 года назад + время, прошедшее в текущем году.

Пример: если я выполню процедуру сегодня 6-10-2009 , она должна удалить строки старше 2008-01-01 00: 00 (то есть, 2007 год включен и обратно ).

Как я могу получить дату первой секунды года?

Я пробовал это:

select cast((DATEPART(year, getdate()) -1 )AS DATETIME);

но я получаю 1905-07-02 00:00:00.000, а не 2008-01-01 00:00 (поскольку я ошибочно ожидается).

Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 3 ]

11 голосов
/ 06 октября 2009

РЕДАКТИРОВАТЬ: Это возвращалось в текущем году, когда вопрос был за предыдущий год. Код был исправлен, чтобы отразить это.

используйте это

select DATEADD(yy, DATEADD(yy, DATEDIFF(yy,0,getdate()), 0), -1)

ИЛИ использовать вашу переменную:

select DATEADD(yy, DATEADD(yy, DATEDIFF(yy,0,@YourDateTimeValue), 0), -1)
5 голосов
/ 06 октября 2009

Это будет работать:

select cast('01 jan' + CAST((DATEPART(year, getdate())-1) as varchar) AS DATETIME);

(я знаю, что это не «лучшее» решение и, вероятно, включает в себя больше приведений, чем необходимо, но оно работает, и то, как это будет использоваться, кажется прагматичным решением!)

0 голосов
/ 07 октября 2009
SELECT DATEADD(year, DATEDIFF(year, 365, GETDATE()), 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...