2013-05-20 201 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