2013-05-20 92 views
30

我需要找到一个月份的最后一天,按以下格式的最后一天:SQL查询来查找月

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

有人请大家帮帮忙。

+1

可能重复的[在SQL中获取每月的最后一天](http://stackoverflow.com/questions/1051488/get-the-last-day-of-the-month-in-sql ) – Pondlife

+0

参考https://codepedia.info/eomonth-last-date-month-in-sql-server/ –

回答

58

尝试这一个 -

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

只要记住,如果你在between语句中使用它来获取(例如)给定的所有记录月,这将排除最后一天的记录。您可能需要使用下个月的第一天。 – SteveCav

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

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

SELECT CAST(eomonth(GETDATE()) AS datetime) 
1
dateadd(month,1+datediff(month,0,getdate()),-1) 

要检查运行于所选月份的天长度:

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

计算的最后日期这个月是很简单的计算 -

  1. 查找总计数月,直到使用DATEDIFF(.. .. ..)函数今天的日期 - 选择DATEDIFF(MM,0,GETDATE())

输出 - 1374,如果GETDATE()的输出为 “2014年7月23日19:33:46.850”

  1. 递增1到总月计数 - 选择DATEDIFF(MM,0,GETDATE())+ 1

输出 - 1375,如果GETDATE()输出为 “2014年7月23日19:33:46.850”

  1. 获取下个月的第一天 - 选择DATEADD(MM,DATEDIFF(MM,0 ,GETDATE())+ 1,0)

输出 - '2014-08-01 00:00:00.000',如果GETDATE()的输出为 “2014年7月23日19:33:46.850”

  1. 将-1减去下个月的第一个日期,这将返回当前月份的最后一个日期 - 选择DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+ 1,0))

输出 - '2014-07-31 00:00:00。000' ,如果GETDATE()的输出为‘2014年7月23日19:33:46.850’

在相同的计算方式就可以达到 - 下个月 2的最后日期的 1.最后日期上个月 等等......

我希望这篇文章能帮上忙。

0

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

这在T-SQL的伟大工程..

更换查询的GETDATE()与列名。

0
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 
+0

欢迎来到StackOverflow!请考虑在代码中添加一些解释。谢谢。 – Aurasphere