programing

SQL Server Reporting Services(VB)에서 이전 달력 달의 첫째 날과 마지막 날을 찾습니다.네트)

golfzon 2023. 5. 9. 23:28
반응형

SQL Server Reporting Services(VB)에서 이전 달력 달의 첫째 날과 마지막 날을 찾습니다.네트)

MS SQL Server Reporting Services에서 보고서를 만들고 있으며 기본 시작 및 종료 날짜 보고서 매개 변수를 이전 달력 월의 처음 및 마지막 날짜로 설정해야 하므로 도움이 필요합니다.

보고서는 월의 두 번째 달력 요일에 생성되며 다음에 대한 값이 필요합니다.

이전 달력 월
첫날
마지막 날

DateAdd로 작업했지만 식(VB)을 만들지 못했습니다.내가 이해하는 바로는 NET).저는 당신이 저에게 도움을 주시면 감사하겠습니다!

Randall, 다음은 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",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 기능에 대한 MSDN 설명서는 이 기능이 예상 범위를 벗어나는 값을 수용한다고 설명합니다.year,month,그리고.day매개 변수이를 통해 유용한 날짜 상대 값을 지정할 수 있습니다.예를 들어, 다음에 대한 값이 됩니다.Day"전월의 마지막 날"을 의미합니다.그것은 말이 됩니다: 그것은 현재 달의 첫째 날 전날입니다.

이러한 기능은 특히 구독 보고서를 설정하는 데 큰 도움이 되었습니다. 그러나 위에 게시된 현재 달의 마지막 날 기능을 사용할 때는 진행 월이 현재 달과 동일한 날짜만 있으면 작동한다는 것을 알게 되었습니다.저는 이러한 수정 사항들을 검토하고 테스트했으며 앞으로 다른 개발자들에게 도움이 되기를 바랍니다.

날짜 공식:지난 달의 첫째 날 찾기:

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

저는 SSRS에 대해 잘 모르지만, VB에서는 전월의 시작과 끝을 알 수 있습니다.를 사용한 네트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#)

C#:

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

실제 VB를 번역하는 데 어려움을 겪고 있었습니다.SSRS가 사용하는 식 하위 집합에 대한 NET.당신은 확실히 저에게 영감을 주었고 이것이 제가 생각해낸 것입니다.

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

시작 날짜(지난달 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 에서 확인할 수 있습니다.

이것은 당신에게 즉시 날짜를 제공할 것입니다.

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

이것은 당신에게 날짜 시간을 제공할 것입니다.

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

언급URL : https://stackoverflow.com/questions/2059977/find-first-and-last-day-for-previous-calendar-month-in-sql-server-reporting-serv

반응형