Calculer le dernier jour dans le sortingmestre COURANT

Quel est le moyen le plus efficace pour calculer le dernier jour du sortingmestre en cours?

Exemple: étant donné la date 05/03/09, je veux returnner 31/03/09.

La plateforme est ColdFusion et SQL Server

SELECT DATEADD(qq, DATEDIFF(qq, - 1, '3/5/09'), - 1) 

Cette réponse utilise les fonctions embeddedes Quarter et DaysInMonth:

 #createDate(year(now()), (quarter(now())*3), daysInMonth(createDate(year(now()), quarter(now())*3,1)) )# 

Il pourrait être plus facile de lire si son éclaté un peu.


EDIT (@Sam Farmer: J'ai pris la liberté de transformer votre suggestion en une fonction FC)

 <cffunction name="LastOfQuarter" returntype="date" output="no" access="public"> <cfargument name="d" type="date" required="no" default="#Now()#"> <cfset d = CreateDate(Year(d), Quarter(d) * 3, 1)> <cfreturn DateAdd("d", d, DaysInMonth(d) - 1)> </cffunction> 

Cela pourrait utiliser un refactoring, mais devrait avoir l'idée de base à travers.

 <cffunction name="lastDayOfQuarter"> <cfargument name="d" default="#now()#"> <cfif month(d) lte 3> <cfreturn createDate(year(d),03,31)> </cfif> <cfif month(d) lte 6> <cfreturn createDate(year(d),06,30)> </cfif> <cfif month(d) lte 9> <cfreturn createDate(year(d),9,30)> </cfif> <cfreturn createDate(year(d),12,31)> </cffunction> 

Pour get le sortingmestre d'une date spécifique:

 SELECT dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,<date here>), 0))) 

Ou si vous voulez dire le sortingmestre en cours:

 SELECT dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)))