ich habe eine Oracle Datenbank, in der ich Abfragen möchte, welche Dateien heute erstellt wurden.
Meine momentane Abfrage, welche mir die erstellten Dateien in einem bestimmten Zeitraum anzeigt, lautet:
AND ( Creationdate between to_date(‚2011-04-11‘, ‚YYYY-MM-DD‘) AND to_date(‚2011-04-12‘, ‚YYYY-MM-DD‘))
Wie kann ich mir nur die erstellten Dateien von heute anzeigen lassen?
hallo, zwar kenne ich Oracle nicht, aber auch dort sollte es Funktionen geben, die das Datum ausgeben.
Auf MS-SQL lautet die entsprechende Funktion
getdate()
und gibt das aktuelle Tagesdatum (inkl. Uhrzeit!) aus.
Dies muss dann noch formatiert werden, damit der heutige Tag ab 0 Uhr und bis 23:59:59 Uhr gezählt wird.
Analoge Form für Oracle musst du leider selber finden
Für MS-SQL wäre dies so:
between convert(datetime, convert(varchar, getdate(),104) + ’ 00:00:00’,104)
and convert(datetime, convert(varchar, getdate(),104) + ’ 23:59:59’,104)
Ich hoffe, das hilft dir zumindest ein wenig weiter!
Vielen Dank erstmal! Funktioniert soweit, also ich krieg keinen Fehler ausgespuckt, allerdings werden mir keine Ergebnisse angezeigt. Erst wenn ich vor das = ein
laß’ mal das to_char testweise weg und überprüfe die Einträge von heute, ob die auch mit Deiner Datumsformatangabe übereinstimmen, Ist das Feld vom Typ Date oder DateTime, sprich, wird ein Timestamp abgelegt? Dann taucht nämlich noch Stunden, Minuten und Sekunden auf, und die werden möglicherweise in der Anzeige unterdrückt.
danke nochmal für deine Mühe. Also ich hab das to_char nun weggelassen, hat aber keine Veränderung gebracht. Das Feld ist scheinbar vom Typ DateTime, es wird auf jedenfall eine Zeitangabe mit ausgegeben.
Kann man diese Unterdrückung irgendwie beheben?
Sorry für meine vielen Fragen, aber hab noch nicht so viel mit Oracle gearbeitet.
mit
„set nls_date_format = ‚DD.MM.YYYY‘;“
„set nls_date_language = ‚german‘;“
kannst Du Deiner aktuellen Session ein bestimmtes Datumsformat vorgeben
Überprüfe mal mit
„select sysdate from dual;“
in welcher Form der augenblickliche Timestamp ausgegeben wird
Uhrzeiten unterdrücken sollte auch mit TRUNC gehen:
„select to_char(trunc(sysdate),‚dd.mm.yyyy‘) from dual;“
Bei Ausgabe inklusive Uhrzeit werden die Konstrukte dann ein bissle abenteuerlicher …
Ich musste mich auf einer alten Oracle 9 mal so verkünsteln:
„select to_date(to_char(sysdate,‚dd.mm.yyyy‘) || to_char(sysdate,‚hh24:mi:ss‘),‚dd.mm.yyyy hh24:mi:ss‘) from dual;“
Vielleicht kannst Du aus diesen Infos das Richtige für Dich ableiten.
Zur Not poste doch einfach mal 2-3 Testeintragungen von heutigen Datensätzen.
OK, da steht also noch mehr drin als befürchtet, grins.
Dann so:
AND TRUNC(Creationdate) = to_char(to_date(sysdate, ‚DD.MM.YYYY‘))
evtl. auch ohne to_char, dann 2. Klammer rechts natürlich auch weglassen.
Mit dem Trunc reduzierst Du Creationdate auf „nur“ Datum. Rechts hattest Du ein falsches Format verwendet,
wenn in der DB die Einträge tatsächlich so drinstehen, wie Du sie gepostet hast
Ich weiß wie man ganz einfach in eine Datei „hineindruckt“:
spool c:\temp\sqlresult.txt
select * from [table];
spool off;
dazu gibt es verschiedene SET-Parameter, wo man
sich die SQL-internen Rückgaben unterdrücken lassen kann, Page- und Linesize einstellt, das Heading usw.
Select-Ergebnisse direkt auf den Drucker ausgeben, da bin ich überfragt, weiß nicht ob es da oracle-intern irgendwelche Funktionen gibt.
Alternative wäre ein kleines Shellscript zB wenn Du auf UNIX-Ebene unterwegs bist, allerdings mit dem Zwischenschritt Ergebnisdatei über spool:
Hab zwar schonmal gelesen, dass man das nicht so machen soll, aber ich find am schicksten
trunc(Creationdate) = trunc(sysdate)
oder halt sysdate durch ein anderes Datum ersetzen. Macht in der Form aber die Verwendung von Indexen kaputt, wenn es keine "Creationdate"s in der Zukunft gibt wäre folglich
Bei Oracle gibt es die Funktion SYSDATE, die den aktuellen Zeitstempel (Datum & Uhrzeit) zurückgibt. Du kannst also per Datumsformatierung dir auch nur das aktuelle Datum ausgeben lassen.
Übertragen auf deine Abfrage:
Alte Abfrage:
‚AND ( Creationdate between to_date(‚2011-04-11‘, ‚YYYY-MM-DD‘) AND to_date(‚2011-04-12‘, ‚YYYY-MM-DD‘))‘
Neue Abfrage:
‚AND (Creationdate = to_date(SYSDATE, ‚YYYY-MM-DD‘))‘
Hallo,
mit sysdate. Zeigt Dir das aktuelle Datum mit Uhrzeit.
Trunc(sysdate) zeigt Dir das aktuelle Datum ohne Uhrzeit. Dies kann man auch mit to_date kombinieren.