134

前月の最初と最後の日をタイムスタンプで指定するソリューションが見つかりませんでした。

これが解決策です。

SELECT DATEADD(month, DATEDIFF(month, -1, getdate()) - 2, 0) as FirtDayPreviousMonthWithTimeStamp,
    DATEADD(ss, -1, DATEADD(month, DATEDIFF(month, 0, getdate()), 0)) as LastDayPreviousMonthWithTimeStamp

これは次の場合に返されますcurrentdate = '2012-7-31'

結果:2012-06-01 00:00:00.000 2012-06-30 23:59:59.000

これは次の場合に返されますcurrentdate = '2012-1-1'

結果:2011-12-01 00:00:00.000 2011-12-31 23:59:59.000

4

12 に答える 12

260
select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) --First day of previous month
select DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) --Last Day of previous month
于 2012-07-31T17:46:50.790 に答える
21
SELECT CONVERT(DATE,DATEADD(MM, DATEDIFF(MM, 0, GETDATE())-1, 0)) AS FirstDayOfPrevMonth
SELECT CONVERT(DATE,DATEADD(MS, -3, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) , 0))) AS LastDayOfPrevMonth
于 2014-12-25T09:44:21.337 に答える
10

SQL2012 から、 という新しい関数が導入されEOMONTHました。この機能を使用すると、先月の最初と最後の日を簡単に見つけることができます。

select DATEADD(DD,1,EOMONTH(Getdate(),-2)) firstdayoflastmonth, EOMONTH(Getdate(), -1) lastdayoflastmonth
于 2015-04-02T09:50:08.007 に答える
1

これはかなり単純明快で動的な方法です。先月の最終日については、今日の日付から現在の数値日を引きます。先月の最初の日については、同じコードを使用して、前の結果から数字の日を減算し、1 を加算することを繰り返すだけです。

declare @PriorEOM as datetime
declare @PriorFOM as datetime

Set @PriorEOM = dateadd(day,-day(getdate()),getdate())

Set @PriorFOM = dateadd(day,-day(@PriorEOM) + 1,@PriorEOM)

Print @PriorEOM
Print @PriorFOM
于 2015-09-29T22:56:49.833 に答える
1

'20011231' のように、ある月の 31 日を基準日とします。次に、
次の手順を使用します (以下に同じ例を 3 つ示しましたが、@dt の値のみが異なります)。

declare @dt datetime;

set @dt = '20140312'

SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231');



set @dt = '20140208'

SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231');



set @dt = '20140405'

SELECT DATEADD(month, DATEDIFF(month, '20011231', @dt), '20011231');
于 2014-09-17T21:08:08.770 に答える