2016-08-03 14 views
0

In meiner SQL Server-Prozedur habe ich einen Eingabeparameter wie created_date.SQL Server sucht Enddatum des Monats - Monat Bereich

Basierend auf diesem erstellten Datum muss ich das erste und letzte Datum des Monats herausfinden.

For example, 

Wenn created_date 12-08-2016 ist,

start_date should be '01-08-2016' 
end_date should be '31-08-2016' 

Wenn created_date ist 15-06-2016

start_date should be '01-06-2016 00:00:00' 
end_date should be '30-06-2016 23:59:59' 
+0

Mit google: https://sqlandme.com/2011/05/ 16/how-to-get-first-und-letzter-Tag-eines-Monats-tsql/ –

+0

bekam Antwort von unter URL, http://Stackoverflow.com/questions/16277504/what-is-the-äquivalent -of-oracles-letzte-tag-funktion-in-sql-server-2008 – Srinivasan

Antwort

0
select 
DATEADD(Month, DATEDIFF(Month, 0, GETDATE()), 0) as monthfirstdate, 
CAST(EOMONTH(GETDATE()) as DATETIME) as monthlastdate 

EOMONTH arbeitet von SQL Server 2012

1

Da Sie Ihre Eingabe ist in DD-MM-YYYY Format, so ist es notwendig, zuerst als MM-DD-YYYY zu verdecken, dann ist es einfach, den ersten und letzten Tag des Monats zu finden.

Die folgende Abfrage wird die Eingabe übernehmen und das Ergebnis im erwarteten Format zurück:

DECLARE @datevalue AS VARCHAR(20) = '15-06-2016'; --12-08-2016'; 
SELECT CONVERT(VARCHAR(10), DATEADD(M, DATEDIFF(M, 0, CONVERT(DATETIME, @datevalue, 105)), 0), 105) [start_date], 
     CONVERT(VARCHAR(10), DATEADD(D, -1, DATEADD(M, DATEDIFF(m, 0, CONVERT(DATETIME, @datevalue, 105)) + 1, 0)), 105) [end_date] 

Ausgang:

start_date end_date 
---------------------- 
01-06-2016 30-06-2016