2016-04-22 10 views
0

Dies ist für die meisten von Ihnen wahrscheinlich eine einfache Frage, aber wie kann ich diese Maske nur auf den Tag basierend laufen?sysdate Oracle Basierend auf Tag laufen

Wenn jemand Crystal Reports Syntax kennt, haben wir dies und es funktioniert {PO_RECEIPTS.DATE_RECEIVED} = current

Wenn jedoch zu Oracle SQL konvertieren, wie kann ich die Standard: TO_CHAR (SYSDATE, ‚MM- DD-YYYY HH24: MI: SS '), um zur Reichweite zu werden, so dass wir alles während des Tages auswählen können, nicht nur was zur Sekunde passt, in der der Bericht ausgeführt wurde, was er nie tun wird.

So etwas wie heute 0.00.00 bis 23.59.59?

Vielen Dank!

Antwort

3

Wenn PO_RECEIPTS.DATE_RECEIVED ist eine Datumsspalte, in der alle Zeiten bis Mitternacht gesetzt sind, dann können Sie tun:

WHERE PO_RECEIPTS.DATE_RECEIVED = TRUNC(sysdate) 

Wenn die Werte zu anderen Zeiten haben, dann können Sie einen Bereich verwenden:

WHERE PO_RECEIPTS.DATE_RECEIVED >= TRUNC(sysdate) 
AND PO_RECEIPTS.DATE_RECEIVED < TRUNC(sysdate) + 1 

Wenn Sie ein Datum abschneiden, wird die Uhrzeit standardmäßig auf Mitternacht eingestellt, sodass TRUNC(sysdate) heute Morgen Mitternacht ist. Für den Bereich erhalten Sie alle Datensätze gleich oder später als Mitternacht an diesem Morgen, und weniger als Mitternacht morgen - das ist, was TRUNC(sysdate) + 1 gibt Ihnen, normale Oracle Datetime-Arithmetik.

Sie wollen nicht wirklich in eine Zeichenfolge konvertieren mit TO_CHAR(); Sie entweder alle Spaltenwerte konvertieren müssten auch auf Strings (was ineffizient ist und verhindert, dass ein Index verwendet wird), oder lassen Sie die Zeichenfolge (implizit) konvertiert werden ohnehin zu einem Zeitpunkt zurück. Es ist besser, einen Spaltenwert mit demselben Datentyp zu vergleichen, um Verwechslungen zu vermeiden.

+0

Perfect, danke! –

+0

Beachten Sie außerdem, was Alex NICHT getan hat. Es wäre einfacher gewesen (weniger Tippen), TRUNC (DATE_RECEIVED) mit TRUNC (SYSDATE) zu vergleichen. Aber das ist keine gute Übung. Wenn das Umbrechen von Spaltenwerten innerhalb von Funktionen vermieden werden kann, sollte dies vermieden werden, selbst auf Kosten eines längeren Codes. Dies hängt mit der Leistung zusammen (Möglichkeit, einen Index für die Spalte DATE_RECEIVED zu verwenden, die Sie möglicherweise haben, da dieses Feld in Ihren Abfragen als wichtig erscheint). +1, um immer gute Programmierpraktiken zu demonstrieren. – mathguy

+0

Danke Mathguy, das werde ich mir in Zukunft merken. Ich habe viel über die richtigen Gewohnheiten der Codierung zu lernen. –

Verwandte Themen