web-dev-qa-db-ja.com

月の最後の日を見つけるSQLクエリ

次の形式で月の最後の日を見つける必要があります。

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

誰でも助けてください。

37
prabu R

これを試してください-

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
69
Devart

この質問はSQL Server 2005に関するものでしたが、言及したいと思いました。SQL2012の時点で、今月の最後の日を取得するEOMONTH()関数があります。元の質問者が指定した形式で取得するには、datetimeにキャストする必要があります。

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

SQL Server 2012では、 eomonth関数 が導入されています。

select eomonth('2013-05-31 00:00:00:000')
-->
2013-05-31
12
Andomar
declare @date datetime;
set @date = getdate(); -- or some date
select dateadd(month,1+datediff(month,0,@date),-1);
8
RichardTheKiwi
dateadd(month,1+datediff(month,0,getdate()),-1)

実行を確認するには:

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

月の最終日を計算するのは非常に簡単な計算です-

  1. DATEDIFF(..、..、..)関数を使用して今日の日付までの合計月数を見つけます-DATEDIFF(MM、0、GETDATE())を選択します

出力-1374、getdate()出力が「2014-07-23 19:33:46.850」の場合

  1. 合計月数に1を加算-DATEDIFF(MM、0、GETDATE())+ 1を選択

出力-1375、getdate()出力が「2014-07-23 19:33:46.850」の場合

  1. 来月の最初の日付を取得する-DATEADD(MM、DATEDIFF(MM、0、GETDATE())+ 1,0)を選択します

出力-「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))を選択します

出力-'2014-07-31 00:00:00.000'、getdate()出力が「2014-07-23 19:33:46.850」の場合

同じ方法で計算できます-1.翌月の最終日2.前月の最終日など...

この記事がお役に立てば幸いです。

0
Rav
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
Subramanian

DATEADD(DAY、-(DAY(DATEADD(MONTH、1、GETDATE()))))、DATEADD(MONTH、1、GETDATE()))を選択します

これはT-sqlでうまく機能します。

クエリのGETDATE()を列名に置き換えます。

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 
0
Deepak
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]
0
Saikh Rakif