2009-03-05 13 views
5

CURRENT四半期の最終日を計算する最も効率的な方法は何ですか?CURRENT四半期の最終日の計算

例:3/5/09の日付を与えられました。3/31/09に戻りたいと思います。

プラットフォームは、ColdFusionおよびSQL Serverの

+0

@Learningを:あなたが考えて作ったもの、質問のニーズとは、[SQLServerの]タグの? *少し混乱しているように見える* – Tomalak

+1

@トマラク:それは質問でそう言いますか? :) – Learning

+0

最後の実際の日、または四半期の最終営業日をやりたいですか? –

答えて

8
SELECT  DATEADD(qq, DATEDIFF(qq, - 1, '3/5/09'), - 1) 
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> 
+0

笑@これを落とすには無知だった。 – Tomalak

+0

+1(効率的であることは要求されたものです)、必ずしもエレガントではありません。 – Dane

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

をこの答えは四半期およびDAYSINMONTH機能に建て使用しています:

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

eそれが少し壊れている場合は読んでください。


EDIT(@Samファーマー:私は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> 
+0

ありがとう!ニースの見ている機能:) –

+0

私は自分の答えでこれを投稿することを考えた。しかし、基本的には、あなたのアイデアを安価に捨ててしまったので、私はそれに反対しました。 ;-) – Tomalak

+0

@Sam Farmer:編集内容を削除して()元のバージョンに戻しました。実際にはローカル変数は不要です。 :-)この関数は "arguments.d"に書き込みますが、それは怪我をしません。 – Tomalak

関連する問題