web-dev-qa-db-ja.com

SQL Reporting Servicesを使用してその月の最終日を取得する方法

SQL Server Reporting Servicesでは、今月の最終日をどのように計算しますか?

17
Cory

これが私が思いついた答えです

=DateSerial(Year(Now()), Month(Now()), "1").AddMonths(1).AddDays(-1)
41
Cory

これを理解するのに少し時間がかかったので、JCの答えは変更するのが最も簡単で、論理構造も良好でした。このトピックに関する回答を検索している他の人のために少し拡張しました。私は通常、月/年の最終日だけでなく、月/年の最初の日も必要としないことを発見しました。だからここにそれらはちょうどそれを計算するための完全な行です。 SQlバージョンもあります。

当月の初日

SSRS=Today.AddDays(1-Today.Day)
SQL=SELECT DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,getdate()),0))

今月の最終日

SSRS=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)
SQL=SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))

今年の初日

SSRS=Today.AddMonths(1-Today.month).AddDays(1-Today.day)
SQL=SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

今年の最終日

SSRS=Today.AddDays(1-Today.Day).AddMonths(13-today.month).AddDays(-1)
SQL=SELECT DATEADD(dd,-1,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0)))

これがsomoneに役立つことを願っています。

21
Technane

私はあなたがあなた自身の答えを見つけたのを知っています、しかし私はこの代替案を提案するでしょう:

=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)

私の意見では、少し読みやすく、パフォーマンスがわずかに向上している可能性があります(ほとんどの場合、気付かれません)

そしてもちろん、その日付を23:59:59まで埋めたい場合は、必要に応じて、わずかに変更します。

=Today.AddDays(1-Today.Day).AddMonths(1).AddSeconds(-1)
11
JC Ford

Microsoft SQLチームメンバーのブログから:

-- returns the last day of the current month.
select dbo.Date(year(getdate()), month(getdate())+1,0)

http://weblogs.sqlteam.com/jeffs/archive/2007/01/02/56079.aspx

お役に立てれば! -ダブ

0
Dubs

この式を試すことができます。今すぐ日付フィールドに置き換えてください。

= DateSerial(Year(Now)、Month(Now)、1)

お役に立てれば。

よろしく

0
justine ramos

マークされた回答のようにさらに簡単な方法があります:

=DateSerial(Year(Now()), Month(Now())+1, 0)

DateSerial()は整数をパラメーターとして受け入れるため、AddMonths()およびAddDays()を使用する必要はありません。例のように、DateSerial()内での即時計算が可能です。

さらに、1日目はその月の最初の日で、1日目から1日を引いた日が前の月の最後の日です(1-1 = 0)。したがって、この例では、今月の最終日の日付が返されます。

0
Ted Raven