web-dev-qa-db-fra.com

Rechercher le premier et le dernier jour du mois civil précédent dans SQL Server Reporting Services (VB.Net)

Je crée un rapport dans MS SQL Server Reporting Services et je dois définir les paramètres de rapport de date de début et de fin par défaut pour être les première et dernière dates du mois civil précédent et j'ai besoin d'aide.

Le rapport est généré le 2ème jour calendaire du mois et j'ai besoin de valeurs pour:

Mois du calendrier précédent
- premier jour
- dernier jour

J'ai travaillé avec DateAdd, mais je n'ai pas réussi à créer une expression (dans VB.NET si je comprends bien). J'apprécierais vraiment toute aide que vous pourriez me donner!

30
Randall

Randall, voici les expressions VB que j'ai trouvées travailler dans SSRS pour obtenir le premier et le dernier jour de n'importe quel mois, en utilisant le mois en cours comme référence:

Premier jour du mois dernier:

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

Premier jour de ce mois:

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

Premier jour du mois prochain:

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

Dernier jour du mois dernier:

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

Dernier jour de ce mois:

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

Dernier jour du mois prochain:

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

Le documentation MSDN pour la fonction VisualBasic DateSerial(year,month,day) explique que la fonction accepte des valeurs en dehors de la plage attendue pour les year, month et day paramètres. Cela vous permet de spécifier des valeurs relatives à la date utiles. Par exemple, une valeur de 0 pour Day signifie "le dernier jour du mois précédent". C'est logique: c'est la veille du premier jour du mois en cours.

64
Ray

Ces fonctions m'ont été très utiles - en particulier dans la configuration des rapports d'abonnement; cependant, j'ai remarqué qu'en utilisant la fonction Dernier jour du mois en cours affichée ci-dessus, elle fonctionne tant que le mois en cours a le même nombre de jours que le mois en cours. J'ai travaillé et testé ces modifications et j'espère qu'elles aideront d'autres développeurs à l'avenir:

Formules de date: Rechercher le premier jour du mois précédent:

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

Rechercher le dernier jour du mois précédent:

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

Rechercher le premier jour du mois en cours:

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

Rechercher le dernier jour du mois en cours:

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

Je ne connais pas SSRS, mais vous pouvez obtenir le début et la fin du mois précédent dans VB.Net en utilisant le constructeur DateTime, comme ceci:

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 peut être n'importe quel objet DateTime, tel que DateTime.Today ou #12/23/2003#)

4
SLaks

J'avais quelques difficultés à traduire VB.NET réel en sous-ensemble d'expression que SSRS utilise. Vous m'avez certainement inspiré et c'est ce que j'ai trouvé.

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

Je sais que c'est un peu récursif pour le StartDate (premier jour du mois dernier). Y a-t-il quelque chose qui me manque ici? Ce sont strictement des champs de date (c'est-à-dire pas d'heure), mais je pense que cela devrait capturer l'année bissextile, etc.

Comment ai-je fait?

3
Randall

en 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

Je cherchais une réponse simple pour résoudre ce problème moi-même. voici ce que j'ai trouvé

Cela divisera l'année et le mois, prendra un mois de congé et aura le premier jour.

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

Obtient le premier jour du mois précédent du courant

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

Plus de détails peuvent être trouvés à: http://msdn.Microsoft.com/en-us/library/aa227522%28v=vs.60%29.aspx

2
Riki Waikato

Celui-ci ne vous donnera aucune date:

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

Celui-ci vous donnera datetime:

=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