2014-10-30 5 views
2

Я создал функцию «ufngetFirstDateOfMonth» и «ufngetLastDateOfMonth», хранящуюся в Microsoft SQL Server 2008. Моя цель - отправить некоторую дату в функцию и она вернет первую дату месяца с «00: 00: 00» или последней датой месяца с «23: 59: 59».Как получить последнюю дату месяца SQL Server 2008

я вызываю функцию, как это:

exec ufngetLastDateOfMonth('2014-10-15') 

и обычно она возвращает «2014-10-31 23:59:59»
, но когда я посылаю последнюю дату месяца, что есть 31 дней (август, январь, ...):

exec ufngetLastDateOfMonth('2014-10-31') 

это вернуть '2014-10-30 23:59:59' Уик не является правильным вынашивал, оно должно быть «2014-10-31 23:59:59 '

Someth ING идет здесь не так ...

Это моя функция:

CREATE FUNCTION [dbo].[ufnLastDateOfMonth](@Date date) 
RETURNS varchar(50) 

AS 
BEGIN 

DECLARE @New_Date varchar(50) 

select @New_date = cast(dateadd(dd,-(DAY(@Date)),DATEADD(mm,1,@Date))as varchar(50)) + ' 23:59:59' 

RETURN @New_Date 

END 
+1

Как насчет «последнего дня месяца - за один день до 1-го числа следующего месяца»;) – TomTom

+1

'EOMONTH()'?не уверен в sql-сервере 2008 –

+0

EOMONTH() нуждается в SQL Server 2012 –

ответ

3

Чтобы получить последний день вы можете сделать это:

SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,'2014-08-12')+1,0)) 

Добавление к вашей функции:

select @New_date = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@date)+1,0)) 

Источник:

SQL SERVER – Find Last Day of Any Month – Current Previous Next

+0

ваш второй метод работает отлично для меня спасибо –

+0

@HardikPatel 'EOMONTH()' 2012+ это требование 2008 года: https://msdn.microsoft .com/en-us/library/hh213020.aspx – Tanner

+0

@Tanner вы правы. –

2

Перейти к первому дню месяца. Добавьте один месяц. Затем вычтите один день. Или, в вашем случае, одна вторая:

select @New_date = dateadd(second, -1, dateadd(month, 1, dateadd(day, -(DAY(@Date) + 1)))) 

Вы должны использовать convert(), если вы хотите, чтобы это как строка. Вместо этого я предлагаю вернуть функцию datetime.

1

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

DECLARE @curdate datetime; 
SET @curdate = GETDATE(); -- you can pass your date here 
--SET @curdate = '2014-10-15'; Example 
SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,0,@curdate),-1); 

ИЛИ

SELECT DATEADD(MONTH,1+DATEDIFF(MONTH,0,GETDATE()),-1); 
0

вы можете попробовать это

select DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, GETDATE()) + 1, 0)) As EndDateOfCurrentMonth 

или это

select DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) As StartDateOfCurrentMonth 
0

Просто попробуйте это,

ВЫБОР EOMONTH ('2000/2/1 ') Last_Date

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