2008-11-19 8 views
5

Was ist der effizienteste Weg, um den letzten Tag des vorherigen Quartals zu berechnen?Berechnen Sie den letzten Tag des Quartals

Beispiel: Angesichts des Datums 19.11.2008 möchte ich den 30.9.2008 zurückgeben.

Plattform ist SQL Server

+0

Was ist das gewünschte Ergebnis für '2008.09.30'? "30.06.2008"? – TToni

+0

ja, und alle Grenzen zu erfassen: 01.10.2008 sollte 9/30/2008 –

Antwort

18

Wenn @Date das Datum in Frage

Select DateAdd(day, -1, dateadd(qq, DateDiff(qq, 0, @Date), 0)) 

EDIT hat: Danke unten an @strEagle, einfacher noch ist:

Select dateadd(qq, DateDiff(qq, 0, @Date), -1) 
+0

Ich dachte in die gleiche Richtung, aber ich wusste nicht über die "qq" Bits. Macht die Dinge viel einfacher ... – TToni

2

Ich kam auf diese (für alle Monate getestet):

select dateadd(dd,-1,dateadd(qq,datediff(qq,0,'11/19/2008'),0)), 
     dateadd(dd,-1,dateadd(qq,datediff(qq,0,'10/19/2008'),0)), 
     dateadd(dd,-1,dateadd(qq,datediff(qq,0,'12/19/2008'),0)) 

Es könnte die einfachste entpuppen.

8

Eigentlich einfacher ist:

SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), -1) 
3

Holen Sie sich das aktuelle Datum

SELECT CONVERT(DATE,GETDATE()) [Current Date] 

den ersten Tag des Quartals für das aktuelle Datum das letzte Datum des Quartals für das aktuelle Datum

SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()) ,0)) [Current Quarter 1st Date] 

Get

SELECT CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) +1, 0))) [Current Quarter Last Date] 

Get Holen Sie sich das erste Datum des nächsten Quartals für das aktuelle Datum

SELECT CONVERT(DATE, DATEADD(QQ, DATEDIFF(QQ, 0, GETDATE()) +1 ,0)) [Next Quarter 1st Date] 

Holen Sie sich das letzte Datum des nächsten Quartals für das aktuelle Datum

SELECT CONVERT(DATE,DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) +2, 0))) [Next Quarter Last Date] 
+1

Ich denke, es wäre großartig, wenn Sie erklären könnten, was Sie getan haben. Dann werden mehr Menschen in der Lage sein zu verstehen, was Sie vorgeschlagen haben. – jazzurro

-1

In amazon Rotverschiebung:

Letzter Tag des Vorquartals:

select dateadd(day,-1,DATE_TRUNC('qtr', current_date)) from whatever 

Letzter Tag des aktuellen Quartals:

select dateadd(qtr,1,dateadd(day,-1,DATE_TRUNC('qtr', current_date))) from whatever 
+0

Die Plattform ist SQL Server. 'DATE_TRUNC' wird nicht unterstützt. – strickt01

0
convert(varchar, dateadd(dd,-1,dateadd(qq,1,DATEADD(qq, DATEDIFF(qq,0,YOUR_DATE), 0))),112) 

Sie können auch 112 Basis dazu weiter unten Liste ändern

SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM) 
             -- Oct 2 2008 11:01AM 
SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2008     
SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02   
SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy 
SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy 
SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy 
SELECT convert(varchar, getdate(), 106) -- dd mon yyyy 
SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy 
SELECT convert(varchar, getdate(), 108) -- hh:mm:ss 
SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM) 
             -- Oct 2 2008 11:02:44:013AM 
SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy 
SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd 
SELECT convert(varchar, getdate(), 112) -- yyyymmdd 
SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm 
             -- 02 Oct 2008 11:02:07:577  
SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h) 
SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) 
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm 
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm 
             -- 2008-10-02T10:52:47.513 
-- SQL create different date styles with t-sql string functions 
SELECT replace(convert(varchar, getdate(), 111), '/', ' ') -- yyyy mm dd 
SELECT convert(varchar(7), getdate(), 126)     -- yyyy-mm 
SELECT right(convert(varchar, getdate(), 106), 8)   -- mon yyyy 
+0

Die Frage bezieht sich nicht auf die Konvertierung in VARCHAR in irgendeiner Weise, nur um ein Datum zu erhalten, das das Ende des Quartals ist. –

+0

Yaya, ich weiß, aber ich denke, jemand wird das gleiche mit mir haben. Sie wollen auch nur das letzte Datum eines Quartals mit JJJJMMT-Format erhalten. Vielen Dank –

Verwandte Themen