web-dev-qa-db-ja.com

SQL Server Reporting Services(VB.Net)で前月の最初と最後の日を見つける

MS SQL Server Reporting Servicesでレポートを作成していますが、デフォルトの開始日と終了日のレポートパラメーターを前月の最初と最後の日付に設定する必要があり、サポートが必要です。

レポートは月の2番目のカレンダー日に生成され、次の値が必要です。

前月
- 初日
-最終日

私はDateAddを扱ってきましたが、Expressionの作成に成功していません(VB.NETで理解しているとおり)。あなたが私に与えることができる助けを本当に感謝します!

30
Randall

ランドール、ここにVB=式があります。SSRSで、月の最初と最後の日を取得するために、今月を参照として使用することがわかりました。

先月の最初の日:

_=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 
_

今月の最初の日:

_=dateadd("m",0,dateserial(year(Today),month(Today),1)) 
_

来月の最初の日:

_=dateadd("m",1,dateserial(year(Today),month(Today),1)) 
_

先月の最終日:

_=dateadd("m",0,dateserial(year(Today),month(Today),0))
_

今月の最終日:

_=dateadd("m",1,dateserial(year(Today),month(Today),0))
_

来月の最終日:

_=dateadd("m",2,dateserial(year(Today),month(Today),0))
_

VisualBasic DateSerial(year,month,day)関数のMSDNドキュメント は、関数がyearmonth、およびdayパラメーターの予期される範囲外の値を受け入れることを説明しています。これにより、有用な日付相対値を指定できます。たとえば、Dayの値が0の場合、「前月の最終日」を意味します。それは理にかなっています:それは今月の1日目の前日です。

64
Ray

これらの機能は、特にサブスクリプションレポートの設定において非常に役立ちました。ただし、上記の「今月の最後の日」機能を使用すると、先月が現在の月と同じ日数である限り機能します。私はこれらの修正を試し、テストしましたが、将来他の開発者を助けることを願っています:

日付式:前月の最初の日を検索:

DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1))

前月の最終日を見つける:

DateSerial(Year(Today()), Month(Today()), 0)

今月の最初の日を見つける:

DateSerial(Year(Today()),Month(Today()),1)

今月の最終日を見つける:

DateSerial(Year(Today()),Month(DateAdd("m", 1, Today())),0)
34
Stephanie Grice
Dim thisMonth As New DateTime(DateTime.Today.Year, DateTime.Today.Month, 1)
Dim firstDayLastMonth As DateTime
Dim lastDayLastMonth As DateTime

firstDayLastMonth = thisMonth.AddMonths(-1)
lastDayLastMonth = thisMonth.AddDays(-1)
16
David M

私はSSRSに精通していませんが、次のようにDateTimeコンストラクターを使用してVB.Netで前月の始まりと終わりを取得できます。

Dim prevMonth As DateTime = yourDate.AddMonths(-1)

Dim prevMonthStart As New DateTime(prevMonth.Year, prevMonth.Month, 1)
Dim prevMonthEnd As New DateTime(prevMonth.Year, prevMonth.Month, DateTime.DaysInMonth(prevMonth.Year, prevMonth.Month))

yourDateは、DateTime.Today#12/23/2003#などのDateTimeオブジェクトにすることができます)

4
SLaks

実際のVB.NETをSSRSが使用するExpressionサブセットに変換するのに苦労していました。あなたは間違いなく私にインスピレーションを与え、これが私が思いついたものです。

StartDate  
=dateadd("d",0,dateserial(year(dateadd("d",-1,dateserial(year(Today),month(Today),1))),month(dateadd("d",-1,dateserial(year(Today),month(Today),1))),1))

End Date
=dateadd("d",0,dateserial(year(Today),month(Today),1))  

StartDate(先月の初日)が少し再帰的であることは知っています。ここに足りないものはありますか?これらは厳密に日付フィールド(つまり、時間なし)ですが、うるう年などをキャプチャする必要があると思います。

どうだった?

3
Randall

c#の場合:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-1)
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)
3
Jimmy

私はこれを自分で解決する簡単な答えを探していました。ここに私が見つけたものがあります

これにより、年と月が分割され、1か月休みを取って初日が取得されます。

firstDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate) - 1, 1)

現在から前月の最初の日を取得します

lastDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate), 0)

詳細については、次を参照してください: http://msdn.Microsoft.com/en-us/library/aa227522%28v=vs.60%29.aspx

2
Riki Waikato

これはあなたに時間を与えません

=FormatDateTime(DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1)), 
DateFormat.ShortDate)

これはあなたに日時を与えます:

=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 
1
donviti
        Dim aDate As DateTime = #3/1/2008# 'sample date
    Dim StartDate As DateTime = aDate.AddMonths(-1).AddDays(-(aDate.Day - 1))
    Dim EndDate As DateTime = StartDate.AddDays(DateTime.DaysInMonth(StartDate.Year, StartDate.Month) - 1)

    'to access just the date portion
    ' StartDate.Date
    ' EndDate.Date
0
dbasnett