2009-03-05 42 views
5

Cách hiệu quả nhất để tính ngày cuối cùng của quý CURRENT là gì?Tính ngày cuối cùng trong quý CURRENT

Ví dụ: được cung cấp ngày 3/5/09, tôi muốn trả lại ngày 31/3/2009.

Platform là ColdFusion và SQL Server

+0

@Learning: khiến bạn nghĩ gì mà nhu cầu câu hỏi và [SQLServer] thẻ? * có vẻ hơi bối rối * – Tomalak

+1

@Tomalak: bởi vì nó nói như vậy trong câu hỏi? :) – Learning

+0

Bạn có muốn làm ngày thực tế cuối cùng hoặc ngày làm việc cuối cùng của quý không? –

Trả lời

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

Điều này có thể sử dụng một số refactoring, nhưng sẽ nhận được các ý tưởng cơ bản trên.

<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

lol @whoever đủ ngu dốt để bỏ phiếu này. – Tomalak

+0

+1 cho hiệu quả (đó là những gì được yêu cầu), mặc dù nó không nhất thiết phải thanh lịch. – Dane

0

Để có được quý từ một ngày cụ thể:

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

Hoặc nếu bạn có nghĩa là quý hiện tại:

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

câu trả lời này sử dụng được xây dựng trong các chức năng khu phố và DaysInMonth:

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

Nó có thể là e asier để đọc nếu nó bị hỏng một chút.


EDIT (@Sam Farmer: Tôi mất sự tự do để thay đổi đề nghị của bạn vào một chức năng 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

Cảm ơn! Chức năng tìm kiếm đẹp :) –

+0

Tôi đã nghĩ về việc đăng bài này trong một câu trả lời của riêng tôi. Nhưng về cơ bản nó sẽ là một sự suy nghĩ rẻ tiền về ý tưởng của bạn, vì vậy tôi quyết định chống lại nó. ;-) – Tomalak

+0

@Sam Farmer: Đã xóa bản chỉnh sửa của bạn () và được chuyển về phiên bản gốc. Một biến cục bộ là không cần thiết, thực sự. :-) Hàm sẽ ghi vào "arguments.d", nó sẽ không bị tổn thương. – Tomalak

Các vấn đề liên quan