Обновление даты часть поля datetime в последний день-в SQL


Я использую SQL Server 2005.

В одной из моих хранимых процедур у меня есть параметр @pstatDate типа DateTime.

Я должен просто обновить часть даты параметра до последнего дня этого месяца.

Например, если дата Apr 23 2012 2:15PM мне нужно обновить ее до Apr 30 2012 2:15PM

Как я могу этого достичь.

2 2

2 ответа:

Может быть, что-то вроде этого:

DECLARE @Today DATETIME
SET @Today=GETDATE()

SELECT DATEADD(DAY,-DAY(DATEADD(MONTH,MONTH(@Today)+1,@Today)),
DATEADD(MONTH,1,@Today))

Вы также можете сделать это следующим образом:

SELECT @Today+datediff(day, @Today, dateadd(month, 1, @Today))-
DATEPART(day,@Today)

Как сказал @Aaron Bertrand:

Я бы поостерегся использовать неявную математику дат (@Today+...) потому что этот синтаксис не будет работать на новых типах данных (OP может в конечном итоге переместиться выключите SQL Server 2005 и соблазнитесь датой или DATETIME2, или другим читатели могут уже использовать дату и т. д.)

Итак, согласно этому, тогда что-то вроде этого:

SELECT DATEADD(DD,datediff(day, @Today, dateadd(month, 1, @Today))-
DATEPART(day,@Today),@Today)
DECLARE @pstatDate DATETIME;
SET @pstatDate = 'Apr 23 2012 2:15PM';

SELECT DATEADD(MONTH, 1, DATEADD(DAY, 0-DAY(@pstatDate), @pstatDate));

Результат:

-----------------------
2003-04-30 14:15:00.000