Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The EOMONTH() function is new in SQL Server 2012.
BOL link: http://technet.microsoft.com/en-us/library/hh213020.aspx
In the previous version (SQL Server 2008), a popular albeit obscure way to get the end of the month:
SELECT CONVERT(DATE, dateadd(mm, datediff(mm,0, current_timestamp)+1,-1));
-- 2013-06-30
Using the new function which returns DATE:
SELECT EOMONTH(current_timestamp);
-- 2013-06-30
We can add an optional parameter to get the end date for other months:
SELECT EOMONTH(current_timestamp, +1); -- 2013-07-31
SELECT EOMONTH(current_timestamp, -1); -- 2013-05-31
Using a dynamic parameter, we can get the last day of previous year:
SELECT EOMONTH(current_timestamp, -MONTH(current_timestamp)); -- 2012-12-31
Applying the DATEADD function we can obtain the first day of current year:
SELECT DATEADD(DD, 1, EOMONTH(current_timestamp, -MONTH(current_timestamp))); -- 2013-01-01
Applying the DATEDIFF function we can calculate today's Julian date:
SELECT DATEDIFF(DD, EOMONTH(current_timestamp, -MONTH(current_timestamp)), current_timestamp);
-- 163
The first parameter can be local variable:
DECLARE @dt date = current_timestamp;
SELECT EOMONTH(@dt, -1);
-- 2013-05-31
We can use EOMONTH() in a query:
SELECT SalesOrderID, OrderDate, EOMONTH(OrderDate) AS MonthEnd
FROM Sales.SalesOrderHeader ORDER BY OrderDate, SalesOrderID;
/*
SalesOrderID OrderDate MonthEnd
....
43841 2005-07-31 00:00:00.000 2005-07-31
43842 2005-07-31 00:00:00.000 2005-07-31
43843 2005-08-01 00:00:00.000 2005-08-31
43844 2005-08-01 00:00:00.000 2005-08-31
....
*/