2013-06-17 3 views
1

Je veux un mois d'intervalle du 2-15-13 au 2-28-13, mais Dateadd (mm, -1, '2-28-13') retournez 1-15-13 au 1-28-13, je veux qu'il se termine à la fin du mois, c'est-à-dire 1-31-13. Toute aide est appréciée.Comment calculer un mois fiscal à partir du milieu du mois

(modifier/mise à jour)

Je voudrais le rendre plus clair:

declare @Lastmonth_StartDate datetime, 
     @Lastmonth_EndDate datetime, 
     @StartDate datetime = '2/15/13', 
     @EndDate datetime = '2/28/13' 

set @Lastmonth_EndDate=DATEADD(m,-1,@EndDate) 
set @Lastmonth_StartDate =DATEADD(m,-1,@StartDate) 
select @Lastmonth_StartDate, @Lastmonth_EndDate 

au lieu de 28 jan je voudrais 31 janvier pour Lastmonth_EndDate, et si les dates de début sont 2/1/13 - 15/02/13 Je voudrais Lastmonth_EndDate être le 15 du mois précédent.

- Modifier 6/18

Je suis en train d'utiliser IF ou CASE pour faire le travail, mais ne suis pas bon, tout avance s'il vous plaît?

+0

Connexes: http://stackoverflow.com/questions/6111892/sql-how-to-determine-if-date-month-date-contains-29-30-or-31?rq=1 – Paulpro

+0

Quels SGBDR utilisez-vous? ? –

+0

En utilisant 2008R2, merci. – theeasyone

Répondre

0

Pour obtenir la fin d'une année-mois, ajoutez un mois au premier de cette année-mois, puis soustrayez 1 jour. Le reste est des détails.

+0

si je fais cela, mon résultat n'est pas comme prévu si les dates de début sont 2-1-13 à 2-15-13 par exemple. Merci. – theeasyone

+0

Si 2-1-13 est le 2 janvier, alors vous n'avez pas ajouté un mois le premier mois de l'année, vous l'avez ajouté au 2e. –

+0

Non Dan, son 1er feb. Ce que je veux n'est pas si exact un mois précédent: si je passe 2-1-13 à 2-15-13 je veux 1-1-13 à 1-15-13, et si je passe 2-15-13 à 2 -28-13 je veux 1-15-13 au 1-31-13. voyez si vous pouvez aider s'il vous plaît. Merci. – theeasyone

0

Pour la syntaxe que vous utilisez, je crois que vous utilisez SQL Server, pour SQL Server, vous pouvez le faire comme suit:

Début de la période:

Convert(datetime, Convert(varchar(7),DateAdd(m, 0, '2-15-13'),121) + '-01 00:00:00.000', 121) 

Fin de la période:

DateAdd(d, -1, Convert(datetime, Convert(varchar(7),DateAdd(m, 1, '2-28-13'),121) + '-01 23:59:59.997', 121))) 
Questions connexes