SQL 查询以查找该月的最后一天
Posted
技术标签:
【中文标题】SQL 查询以查找该月的最后一天【英文标题】:SQL Query to find the last day of the month 【发布时间】:2013-05-14 20:06:31 【问题描述】:我需要按以下格式查找一个月的最后一天:
"2013-05-31 00:00:00:000"
请大家帮忙。
【问题讨论】:
Get the last day of the month in SQL 的可能重复项 @Satindersingh:他标记了sql-server-2005
。 EOMONTH
是 2012 年及以上。
【参考方案1】:
declare @date datetime;
set @date = getdate(); -- or some date
select dateadd(month,1+datediff(month,0,@date),-1);
【讨论】:
【参考方案2】:试试这个 -
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
【讨论】:
请记住,如果您在 between 语句中使用它来获取(例如)给定月份的所有记录,这将排除最后一天的记录。您可能需要改用下个月的第一天。【参考方案3】:我知道这个问题是针对 SQL Server 2005 的,但我想我会提到 - 从 SQL 2012 开始,现在有一个 EOMONTH()
函数可以获取当月的最后一天。要以原始提问者指定的格式获取它,您必须将其转换为 datetime
。
SELECT CAST(eomonth(GETDATE()) AS datetime)
【讨论】:
【参考方案4】:dateadd(month,1+datediff(month,0,getdate()),-1)
检查运行:
print dateadd(month,1+datediff(month,0,@date),-1)
【讨论】:
【参考方案5】:计算一个月的最后一个日期是相当简单的计算-
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”
同样的计算方式我们可以实现-
-
下个月的最后一天
上个月的最后一个日期
等等。
【讨论】:
【参考方案6】:SQL Server 2012 引入the eomonth
function:
select eomonth('2013-05-31 00:00:00:000')
-->
2013-05-31
【讨论】:
他标记了sql-server-2005
。 EOMONTH
是2012年及以上【参考方案7】:
Select DATEADD(DAY, -(DAY(DATEADD(MONTH, 1, GETDATE()))),DATEADD(MONTH, 1, GETDATE()))
这在 T-sql 中效果很好..
将查询的GETDATE()
替换为您的列名。
【讨论】:
【参考方案8】: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
【讨论】:
欢迎来到 ***!请考虑为您的代码添加一些解释。谢谢。 问题被标记为sql-server
,关于Oracle 的回答没有帮助。【参考方案9】:
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
【讨论】:
【参考方案10】: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]
【讨论】:
【参考方案11】:只是添加一个月和减去一天来创建报告的不同版本:
例如:StartofMonth 是 '2019-10-01'
dateadd(day,-1,dateadd(month,1,StartofMonth))
EndOfMonth 将变为“2019-10-31”
【讨论】:
如果你想要一个日期列来代替 StartOfMonth 怎么办?您的查询是如何工作的?【参考方案12】:选择 DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-0, -1) LastDate
【讨论】:
【参考方案13】:我的绝妙方法。问候
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
【讨论】:
【参考方案14】:在 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
【讨论】:
【参考方案15】:请尝试
SELECT CONVERT(DATE,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))) AS lastDayOfMonth
【讨论】:
以上是关于SQL 查询以查找该月的最后一天的主要内容,如果未能解决你的问题,请参考以下文章