49

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

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

任何人请帮忙。

4

15 回答 15

82

试试这个——

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
于 2013-05-20T09:44:34.967 回答
58

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

SELECT CAST(eomonth(GETDATE()) AS datetime)
于 2013-10-31T19:22:18.903 回答
14

SQL Server 2012 引入了以下eomonth功能

select eomonth('2013-05-31 00:00:00:000')
-->
2013-05-31
于 2014-10-03T10:55:10.763 回答
9
declare @date datetime;
set @date = getdate(); -- or some date
select dateadd(month,1+datediff(month,0,@date),-1);
于 2013-05-20T09:39:13.467 回答
4
dateadd(month,1+datediff(month,0,getdate()),-1)

检查运行:

print dateadd(month,1+datediff(month,0,@date),-1)
于 2014-05-05T23:56:36.497 回答
0

计算一个月的最后一天是相当简单的计算 -

1 - 使用 DATEDIFF 函数查找到今天为止的总月数 -

Select DATEDIFF(MM,0,GETDATE())

输出 - 1374,如果 getdate() 输出为“2014-07-23 19:33:46.850”

2 - 总月数加 1 -

Select DATEDIFF(MM,0,GETDATE())+1

输出 - 1375,如果 getdate() 输出为“2014-07-23 19:33:46.850”

3 - 获取下个月的第一个日期 -

Select DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0)

输出 - '2014-08-01 00:00:00.000',如果 getdate() 输出为“2014-07-23 19:33:46.850”

4 - 减去 -1 到下个月的第一个日期,这将返回当月的最后一个日期 -

Select DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,0))

输出 - '2014-07-31 00:00:00.000',如果 getdate() 输出为“2014-07-23 19:33:46.850”

以相同的计算方式,我们可以实现 -

  1. 下个月的最后一天
  2. 上个月的最后日期等等。
于 2014-07-23T14:14:59.113 回答
0
Select DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE()))),DATEADD(MONTH, 1, GETDATE()))

这在 T-sql 中效果很好 ..

将查询的替换为GETDATE()您的列名。

于 2015-07-13T12:40:08.720 回答
0

只是添加一个月和减去一天来创建报告的不同版本:

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

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

EndOfMonth 将变为“2019-10-31”

于 2019-11-22T18:46:31.423 回答
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 
于 2018-09-12T05:41:13.273 回答
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
于 2020-11-10T15:20:45.463 回答
0

请试试

SELECT CONVERT(DATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))) AS lastDayOfMonth
于 2021-04-07T15:18:09.403 回答
-1

我的一个很好的方法。问候

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
于 2020-04-06T23:12:15.403 回答
-1

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

于 2020-03-09T07:02:19.080 回答
-1
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]
于 2019-03-30T10:46:04.637 回答
-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
于 2016-04-21T13:50:47.613 回答