Подтвердить что ты не робот

Найти первый и последний день для предыдущего календарного месяца в службах отчетов SQL Server (VB.Net)

Я создаю отчет в службах отчетов MS SQL Server, и мне нужно установить параметры отчета о начальной и конечной дате по умолчанию на первую и последнюю даты предыдущего календарного месяца, и мне нужна помощь.

Отчет создается во второй календарный день месяца, и мне нужны значения для:

Предыдущий календарный месяц
- первый день
- последний день

Я работал с DateAdd, но не смог создать Expression (в VB.NET, насколько я понимаю). Буду очень признателен за любую помощь, которую вы можете мне оказать!

4b9b3361

Ответ 1

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

Документация MSDN для функции VisualBasic DateSerial(year,month,day) объясняет, что функция принимает значения за пределами ожидаемого диапазона для year, month и day параметров. Это позволяет указать полезные относительные значения даты. Например, значение 0 для day означает "последний день предыдущего месяца". Это имеет смысл: за день до первого дня текущего месяца.

Ответ 2

Эти функции были очень полезны для меня - особенно при настройке отчетов по подписке; однако я заметил, что при использовании функции "Последний день текущего месяца", опубликованной выше, она работает до тех пор, пока в текущем месяце будет столько же дней, сколько и в текущем месяце. Я проработал и протестировал эти модификации и надеюсь, что они помогут другим разработчикам в будущем:

Формулы даты: Найти первый день предыдущего месяца:

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)

Ответ 3

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)

Ответ 4

Я не знаком с SSRS, но вы можете получить начало и конец предыдущего месяца в VB.Net с помощью конструктора DateTime, например:

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

Ответ 5

в С#:

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

Ответ 6

У меня возникли трудности с переводом фактического VB.NET в подмножество Expression, которое использует SSRS. Вы определенно вдохновили меня, и это то, что я придумал.

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 (первый день последнего месяца). Здесь что-то не хватает? Это строго поля даты (т.е. Нет времени), но я думаю, что это должно зафиксировать високосный год и т.д.

Как я сделал?

Ответ 7

Я искал простой ответ, чтобы решить это сам. вот что я нашел

Это позволит разделить год и месяц, отнять один месяц и получить первый день.

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

Ответ 8

Это даст вам дату без времени:

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

Это даст вам дату и время:

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

Ответ 9

        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