Oracle Datenbank Datum heute anzeigen lassen

Guten Tag,

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?

Wäre für jegliche Hilfe sehr dankbar!

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 :wink:
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!

viele query-Grüße :wink:

Probiers mal damit:

AND Creationdate = to_char(to_date(sysdate, ‚YYYY-MM-DD‘))

Diese Kombi aus to_char und to_date musste ich bei Oracle DBs schon öfters anwenden

Gruß,
Markus

Vielen Dank erstmal! Funktioniert soweit, also ich krieg keinen Fehler ausgespuckt, allerdings werden mir keine Ergebnisse angezeigt. Erst wenn ich vor das = ein

Hallo,

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.

Gruß,
Markus

Hey,

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. :smile:

Gruß,
Benjamin

Hallo enny86,

versuch doch mal ein „and creationdate=sysdate“,
sysdate sollte das aktuelle Datum von heute sein.

Ggf. musst du natürlich noch das Datumsformat entsprechend anpassen.

Gruß Christof

Hallo Benjamin,

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 … :wink:
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.

Gruß,
Markus

Hey,

„02.04.11 09:06:15,000000000“
„02.04.11 09:06:16,000000000“
„02.04.11 09:06:19,000000000“

so sehen die Ausgaben aus.

Bei select sysdate from dual gibt er mir folgendes:

„13.04.11“

Hilft das schon weiter? =)

Vielen Dank nochmal für die Mühe.

Gruß
Benjamin

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 :smile:

Gruß,
Markus

1 Like

Vielen, vielen Dank! Genauso hat es funktioniert. =)
Echt super! Du hast mir echt sehr geholfen.

Eine Frage hätte ich nun allerdings noch, kann man sich die Abfrageergebnisse automatisch ausdrucken lassen?

Vielen Dank nochmal!

Gruß Benjamin

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:

  1. Scriptaufruf
  2. Script startet SQL-Script
  3. Prüfung ob vorhandene Ergebnisdatei
  4. Wenn ja, Datei an Drucker senden
  5. Ende

Gruß,
Markus

1 Like

Hi!

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

Creationdate >= trunc(sysdate)

besser.

Viele Grüße, Alex

Das hat mir schon gereicht. Vielen Dank für deine hilfreichen Antworten, hat alles super funktioniert.
Dankeschön. =)

Gruß
Benjamin

Prima, immer wieder gerne :smile:

Gruß,
Markus

Huhu!

Ohne dass ich jetzt der Oracle-Crack wäre:

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‘))‘

Viele Grüße,
Blasenfuss deluxe

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?

AND CreationDate = trunc(sysdate)

aber vorausgesetzt, das „CreationDate“ ist nicht VARCHAR2 sondern DATE.

Gruß, Ulli

z.B. Creationdate between to_date( to_char(trunc(sysdate))) and to_date( to_char(trunc(sysdate +1)))

trunc und sysdate +1 machen bewirken manchmal dass ein evtl vorhandener Index nicht verwendet wird, mit to_date( to_char geht es wieder.

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.