2010-01-13 147 views
25

我在MS SQL Server Reporting Services中創建報告,並且需要將默認開始和結束日期報告參數設置爲第一個和上個日曆月的最後日期,需要幫助。在SQL Server Reporting Services(VB.Net)中查找上一個日曆月的第一天和最後一天

該報告是在每月的第二個日曆日生成,我需要值:

前一個月的
-
第一天 - 最後一天

我已經一直在使用DateAdd,但尚未成功創建表達式(在VB.NET中,據我瞭解)。我真的很感激你能給我的任何幫助!

回答

3

在C#:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-1) 
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1) 
+2

你可以改變'新'將'new'稱爲VB.NET – 2010-01-13 20:29:53

15
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) 
+1

+1,用於將「參考日期」存儲在一個變量中,這消除了在計算第一個值之間存在月份移位的情況下(很不可能但可能)的情況和最後一天。 – 2010-01-13 20:34:01

+0

我在生產中沒有看到過這個,但是我已經看到了一個正確的原因。 :) – 2010-01-13 20:39:28

3

我不熟悉的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對象,如DateTime.Today#12/23/2003#或)

2

我在將實際的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(上個月的第一天)有點遞歸。有什麼我在這裏失蹤?這些都是嚴格的日期字段(即沒有時間),但我認爲這應該捕捉閏年等。

我該怎麼辦?

0
 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 
49

蘭德爾,這裏是我發現在SSRS工作取得任何一個月的第一天和最後一天,使用當月爲基準的VB表達式:

最後一個月的第一天:

=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",1,dateserial(year(Today),month(Today),0)) 

下個月的最後一天:

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

MSDN documentation for the VisualBasic DateSerial(year,month,day) function解釋說,

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

這個月的最後一天該函數接受值超出yearmonthday參數的預期範圍。這允許您指定有用的日期相對值。例如,Day的值爲0意味着「前一個月的最後一天」。它是有道理的:那是當前月份的第一天前一天。

+5

本月的最後一天和下個月的最後一天不正確;都假設未來幾個月的天數與前一個月的天數相同。請參閱@Stephanie Grice的答案,以更好地實現SSRS表達式。 – stubaker 2014-10-02 20:16:44

29

這些功能一直對我非常有幫助:

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

獲取前一個月的第一天,從目前的

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

更多細節,可以發現訂閱報告;然而,我注意到在使用上面公佈的「當前月份的最後一天」功能時,只要進程的月份具有與當前月份相同的天數,它就會工作。我已經經歷了工作,並測試這些修改,並希望他們幫助在今後其他開發商:

日期公式:上月 查找第一天:

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) 
0

這一次會給你至今還沒有時間:

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

這一次會給你日期時間:

=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 
相關問題