2017-12-13 2 views
4

Ich versuche, Firebird abzufragen, um Daten vom letzten Monat vom Tag 1 bis zum letzten Tag (30 oder 31 abhängig vom Monat) zu erhalten. Wenn ich den Code unten verwende, gibt es verschobene Daten von aktuell, zum Beispiel Tag 11/14/2017 bis 12/13/2017.Erhalten Sie Daten des letzten Monats vom ersten Tag bis zum letzten Tag in Firebird

Der Code:

WHERE DATE >= DATEADD(MONTH,-1, CURRENT_TIMESTAMP(2)) AND DATE<= 'TODAY' 

Die gewünschte Ausgabe ist 2017.11.01 - 11/30/2017

Was ist der richtige Weg, es zu tun?

Antwort

3

Ich benutze Firebird nicht, aber ich habe PostgreSQL ziemlich ausgiebig genutzt und ich denke, das sollte funktionieren:

WHERE 
    DATE BETWEEN dateadd(month, -1, CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) + 1) 
    AND CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) 

Erklärung CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) + 1 sollte auf den ersten dieses Monats und dateadd zurück - 1 Monat sollte es zum vorherigen Monat bringen. Dann, wenn Sie zwischen CURRENT_DATE - EXTRACT(DAY FROM CURRENT_DATE) oder mit anderen Worten 12/13/2017 - 13 Tage sind, sollte das der letzte Tag im November sein. Meine Finger kreuzen. Viel Glück.

+2

Für Firebird anstelle von 'addmonth' verwenden Sie [' dateadd (-1, month, ...)]] (https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/ fblangref25-functions-scalarfuncs.html # fblangref25-functions-scalarfuncs-dateadd) (oder 'dateadd (-1 Monat bis ...)') –

+0

Hi Larry. Perfekt ! Es funktionierte genau so, wie ich es brauchte. Danke vielmals ! :) –

+1

Und ich habe gerade bemerkt, dass ich die falsche Reihenfolge der Argumente für die kommagetrennte Variante in meinem Kommentar hatte. Scheint du hast es richtig gemacht;) Ein leichtes "Problem" ist, wenn Zeitstempel verglichen werden, es verwendet die aktuelle Zeit (also 2017-11-01 21:06 - 2017-11-30 21:06 und nicht 00:00 - 23 : 59) –

Verwandte Themen