SQL Server Reporting Servicesでは、今月の最終日をどのように計算しますか?
これが私が思いついた答えです
=DateSerial(Year(Now()), Month(Now()), "1").AddMonths(1).AddDays(-1)
これを理解するのに少し時間がかかったので、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に役立つことを願っています。
私はあなたがあなた自身の答えを見つけたのを知っています、しかし私はこの代替案を提案するでしょう:
=Today.AddDays(1-Today.Day).AddMonths(1).AddDays(-1)
私の意見では、少し読みやすく、パフォーマンスがわずかに向上している可能性があります(ほとんどの場合、気付かれません)
そしてもちろん、その日付を23:59:59まで埋めたい場合は、必要に応じて、わずかに変更します。
=Today.AddDays(1-Today.Day).AddMonths(1).AddSeconds(-1)
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
お役に立てれば! -ダブ
この式を試すことができます。今すぐ日付フィールドに置き換えてください。
= DateSerial(Year(Now)、Month(Now)、1)
お役に立てれば。
よろしく
マークされた回答のようにさらに簡単な方法があります:
=DateSerial(Year(Now()), Month(Now())+1, 0)
DateSerial()は整数をパラメーターとして受け入れるため、AddMonths()およびAddDays()を使用する必要はありません。例のように、DateSerial()内での即時計算が可能です。
さらに、1日目はその月の最初の日で、1日目から1日を引いた日が前の月の最後の日です(1-1 = 0)。したがって、この例では、今月の最終日の日付が返されます。