thomas1972
Goto Top

Per SQL (Oracle) Alle datensätze des letzten Monats filtern

Hallo ich habe eine Tabelle welche ich abfragen möchte, diese soll mir aber nur die Werte des letzten Monats ausgeben.

Select * from testdate where Datum....

Leider muss ich hier passen.....

Content-Key: 263337

Url: https://administrator.de/contentid/263337

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: 114757
114757 13.02.2015 aktualisiert um 12:03:49 Uhr
Goto Top
http://stackoverflow.com/questions/2369222/oracle-date-between-query
http://stackoverflow.com/questions/2188929/sql-server-select-all-items- ...

unget. etwa so:
SELECT * 
FROM testdate 
WHERE datepart(m,Datum) = datepart(m,dateadd(m,-1,getdate())) 
AND and datepart(yy,Datum) = datepart(yy,dateadd(m,-1,getdate()))

Gruß jodel32
Mitglied: thomas1972
thomas1972 13.02.2015 um 12:47:04 Uhr
Goto Top
Danke für die Rückmeldung..
Er kommt mit dem Datepart an der Stelle <*> nicht weiter,
Fehler im SQL-Statement

DBD::Oracle::db prepare failed: ORA-00904: "DATEPART": invalid identifier
DBD ERROR: error possibly near <*> indicator at char 116 in 'SELECT * FROM testdate WHERE datepart(m,Datum) = datepart(m,dateadd(m,-1,getdate())) AND datepart(yy,Datum) = <*>datepart(yy,dateadd(m,-1,getdate()))'
Mitglied: Biber
Biber 13.02.2015 aktualisiert um 16:43:31 Uhr
Goto Top
Moin thomas1972,

eine der 37449 Möglichkeiten unter Oracle:

Select * from testdate
where trunc( datum, 'MM') = trunc(trunc(sysdate, 'MM') - 1, 'MM')  
;

Zur Erläuterung:
Trunc(datum, 'MM') verkürzt/verallgemeinert ein Datumsfeld auf den Ersten des Monats (aus 13.02.2015 12:55 wird 01.02.2015 00:00)
Das würde also auch heute, am 13.2.2015, bei trunc(sysdate, 'MM') herauskommen.
Davon wird -1 = 1 Tag abgezogen -> ich lande beim Letzten des Vormonats, hier also auf dem 31.1.2015.
Auf den Letzten des Vormonats wiederum ein Trunc( UltimoVormonat), 'MM') --> ergibt den 1. des Vormonats (=1.1.2015)

Und damit kann ich das Trunc(datum) der Datensätze vergleichen.

Grüße
Biber

P.S. Das DatePart-Äquivalent unter Oracle wäre ein ... Extract (Month from Datum) , extract(year from Datum) ..

P.P.S. Okay, nach Gersens Kommentar: Ich habe "nur die Werte des letzten Monats" als "die Werte des Vormonats" verstanden, nicht als "die Werte der letzten 4 Wochen".
Mitglied: Gersen
Gersen 13.02.2015 aktualisiert um 13:07:04 Uhr
Goto Top
Hallo,

liest man den Teil
Zitat von @thomas1972:
nur die Werte des letzten Monats
als Dauer (4 Wochen vor dem aktuellen Datum), wäre
SELECT * FROM testdate WHERE Datum >= (SYSDATE - 28);
vermutlich das Einfachste.

Gruß,
Gersen
Mitglied: ukulele-7
ukulele-7 13.02.2015 um 14:08:04 Uhr
Goto Top
Da steht auch ein <*> wo es nicht hingehört.
Mitglied: Biber
Biber 13.02.2015 aktualisiert um 16:43:48 Uhr
Goto Top
Moin ukulele-7,

Da steht auch ein <*> wo es nicht hingehört.
Mag ja sein, aber Oracle kennt doch trotzdem weder getdate() noch datepart().

Dann ist es eher von nachrangiger Bedeutung, ob thomas1972 ein überflüssiges <*> weglässt oder zwei davon dazumogelt.

Bei einem SQLServer mag das anders aussehen.

Grüße
Biber