计算当前季度的最后一天

时间:2009-03-05 17:36:12

标签: sql sql-server coldfusion

计算CURRENT季度最后一天的最有效方法是什么?

示例:鉴于日期为3/5/09,我想返回3/31/09。

平台是ColdFusion和SQL Server

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

这个答案使用内置的Quarter和DaysInMonth函数:

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

如果它有点破裂可能更容易阅读。


编辑(@Sam Farmer:我冒昧地将你的建议转变为CF函数)

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

答案 2 :(得分:3)

这可以使用一些重构,但应该得到基本的想法。

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

答案 3 :(得分:0)

从特定日期获得季度:

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

或者如果你的意思是当前季度:

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