Рассчитайте последний день в текущем квартале - PullRequest
5 голосов
/ 05 марта 2009

Какой самый эффективный способ рассчитать последний день текущего квартала?

Пример: учитывая дату 3/5/09, я хочу вернуть 3/31/09.

Платформа является ColdFusion и SQL Server

Ответы [ 4 ]

8 голосов
/ 05 марта 2009
SELECT     DATEADD(qq, DATEDIFF(qq, - 1, '3/5/09'), - 1) 
4 голосов
/ 05 марта 2009

В этом ответе используются встроенные функции 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>
3 голосов
/ 05 марта 2009

Для этого может потребоваться некоторый рефакторинг, но следует изложить основную идею.

<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>
0 голосов
/ 05 марта 2009

Чтобы получить квартал с определенной даты:

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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...