SQL Query查找该月的最后一天

时间:2013-05-20 09:37:21

标签: sql-server sql-server-2005 date datetime

我需要以下列格式找到一个月的最后一天:

"2013-05-31 00:00:00:000"

任何人请帮忙。

16 个答案:

答案 0 :(得分:65)

试试这个 -

CREATE FUNCTION [dbo].[udf_GetLastDayOfMonth] 
(
    @Date DATETIME
)
RETURNS DATETIME
AS
BEGIN

    RETURN DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @Date) + 1, 0))

END

<强>查询:

DECLARE @date DATETIME
SELECT @date = '2013-05-31 15:04:10.027'

SELECT DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @date) + 1, 0))

<强>输出:

-----------------------
2013-05-31 00:00:00.000

答案 1 :(得分:40)

我知道这个问题适用于SQL Server 2005,但我想我会提到 - 从SQL 2012开始,现在有一个EOMONTH()函数可以获得该月的最后一天。要以原始提问者指定的格式获取,您必须转换为datetime

SELECT CAST(eomonth(GETDATE()) AS datetime)

答案 2 :(得分:12)

SQL Server 2012引入了the eomonth function

select eomonth('2013-05-31 00:00:00:000')
-->
2013-05-31

答案 3 :(得分:8)

declare @date datetime;
set @date = getdate(); -- or some date
select dateadd(month,1+datediff(month,0,@date),-1);

答案 4 :(得分:3)

dateadd(month,1+datediff(month,0,getdate()),-1)

检查运行:

print dateadd(month,1+datediff(month,0,@date),-1)

答案 5 :(得分:0)

计算月份的最后日期是非常简单的计算 -

  1. 使用DATEDIFF(..,..,..)功能查找到今天为止的总月数 选择DATEDIFF(MM,0,GETDATE())
  2. 输出 - 1374,如果getdate()输出为“2014-07-23 19:33:46.850”

    1. 按总数增加1来计算 - 选择DATEDIFF(MM,0,GETDATE())+ 1
    2. 输出 - 1375,如果getdate()输出为“2014-07-23 19:33:46.850”

      1. 获取下个月的第一个日期 - 选择DATEADD(MM,DATEDIFF(MM,0,GETDATE())+ 1,0)
      2. 输出 - '2014-08-01 00:00:00.000',如果getdate()输出为“2014-07-23 19:33:46.850”

        1. 减去-1到下个月的第一个日期,这将返回当月的最后一个日期 - 选择DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+ 1,0))
        2. 输出 - '2014-07-31 00:00:00.000',如果getdate()输出为“2014-07-23 19:33:46.850”

          以同样的方式计算,我们可以实现 - 1.下个月的最后日期 2.上个月的最后一个日期 等等...

          我希望这篇文章有所帮助。

答案 6 :(得分:0)

选择DATEADD(DAY, - (DAY(DATEADD(MONTH,1,GETDATE()))),DATEADD(MONTH,1,GETDATE()))

这在T-sql中很有用..

使用列名替换查询的GETDATE()。

答案 7 :(得分:0)

Declare @GivenDate datetime 
Declare @ResultDate datetime 
DEclare @EOMDate datetime 
Declare @Day int 
set @GivenDate=getdate() 
set @GivenDate= (dateadd(mm,1,@GivenDate)) 
set @Day =day(@GivenDate) 
set @ResultDate=dateadd(dd,-@Day+1,@GivenDate) 
select @EOMDate =dateadd(dd,-1 ,@ResultDate) 
select @EOMDate 

答案 8 :(得分:0)

declare @date date=getdate()
declare @st_date date,@end_dt date
set @st_date=convert(varchar(5),year(@date))+'-'+convert(varchar(5),month(@date))+'-01'
set @end_dt=DATEADD(day,-1, DATEADD(month,1,@st_date))
---------**************--------------
select @st_date as [START DATE],@end_dt AS [END DATE]

答案 9 :(得分:0)

只是另外一种版本,即添加一个月并减去一天来创建报告:

例如:StartofMonth是'2019-10-01'

dateadd(day,-1,dateadd(month,1,StartofMonth))

EndOfMonth将变为'2019-10-31'

答案 10 :(得分:0)

我的出色方法。问候

DECLARE @MAXDATE INT=(SELECT MAX(DATEPART(YEAR,ORDERDATE)) FROM Orders)
DECLARE @MINDATE INT=(SELECT MIN(DATEPART(YEAR,ORDERDATE)) FROM Orders)
DECLARE @HORA INT=(SELECT MIN( DATEPART(HOUR,ORDERDATE)) FROM ORDERS)
DECLARE @DIA INT = 28

SELECT Employees.EmployeeID , Orders. OrderID , OrderDate  FROM Employees
INNER JOIN Orders 
ON Employees.EmployeeID = Orders.EmployeeID
Where  (DATEPART(YEAR,ORDERDATE)) >=@mindate and  (DATEPART(YEAR,ORDERDATE))<= @maxdate
and DATEPART(HOUR,ORDERDATE)=@HORA   and DATEPART(DAY,ORDERDATE) IN (30,31) OR DATEADD(DAY,0,DATEPART(DAY,ORDERDATE))=28 AND
DATEADD(MONTH,0,DATEPART(MONTH,ORDERDATE))=2
ORDER BY 1 ASC

答案 11 :(得分:0)

在Snowflake(可能还有其他SQL引擎)中,您可以使用LAST_DAY

select to_date('2015-05-08T23:39:20.123-07:00') as "DATE",
       last_day("DATE", 'MONTH') as "LAST DAY OF MONTH";

哪个返回:

DATE         LAST DAY OF MONTH
2015-05-08          2015-05-31

答案 12 :(得分:0)

请试试

SELECT CONVERT(DATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))) AS lastDayOfMonth

答案 13 :(得分:-1)

http://php.net/manual/en/function.cal-days-in-month.php

给定日历中所选月份的天数

<?php
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo "There was $num days in August 2003";
?>

答案 14 :(得分:-1)

TO FIND 1ST and Last day of the Previous, Current and Next Month in Oracle SQL
-----------------------------------------------------------------------------
SELECT 
SYSDATE,
LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1 FDPM,
LAST_DAY(ADD_MONTHS(SYSDATE,-1)) LDPM,
LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1 FDCM,
LAST_DAY(SYSDATE)LDCM,
LAST_DAY(SYSDATE)+1 FDNM,
LAST_DAY(LAST_DAY(SYSDATE)+1) LDNM
FROM DUAL

答案 15 :(得分:-1)

选择DATEADD(MONTH,DATEDIFF(MONTH,-1,GETDATE())-0,-1)LastDate