Wie wählen Sie mit Oracle das aktuelle Datum (d. h. SYSDATE) um 11:59:59 aus?
Berücksichtigen Sie, dass die Definition von Mitternacht etwas unklarer sein könnte (Mitternacht Donnerstag bedeutet Donnerstag und Freitag überbrückt oder Mittwoch und Donnerstag überbrückt?).
Um das aktuelle Datum (Heute) vor Mitternacht (eine Sekunde vorher) auszuwählen, können Sie eine der folgenden Aussagen verwenden:
%Vor%Was es macht:
SYSDATE
: SYSDATE + 1
, jetzt ist das Datum Morgen TRUNC
, jetzt ist das Datum morgen um 00:00 - 1/(24*60*60)
oder - INTERVAL '1' SECOND FROM DUAL
, jetzt ist das Datum Heute um 11:59:59 Hinweis 1: Wenn Sie Datumsintervalle überprüfen möchten, können Sie die @Allan-Antwort unten überprüfen.
Hinweis 2: Als Alternative können Sie diesen anderen verwenden (der einfacher zu lesen ist):
%Vor%TRUNC
, jetzt ist das Datum Heute um 00:00 23:59:59
hinzu, jetzt ist das Datum Heute um 11:59:59 Hinweis 3: Um die Ergebnisse zu überprüfen, können Sie das Format hinzufügen:
%Vor% Ich persönlich mag es nicht, eine Sekunde vor Mitternacht zu benutzen. Unter anderem, wenn Sie timestamp
verwenden, besteht die Möglichkeit, dass der Wert, mit dem Sie vergleichen, zwischen den Lücken liegt (d. H. 23: 59: 59.1). Da diese Art von Logik typischerweise als Grenze für eine Bereichsbedingung verwendet wird, würde ich vorschlagen, "weniger als Mitternacht" anstelle von "weniger als oder gleich eine Sekunde vor Mitternacht" zu verwenden, wenn überhaupt möglich. Die Syntax dafür vereinfacht sich ebenfalls. Um beispielsweise einen Zeitbereich zu erhalten, der "Heute" repräsentiert, können Sie einen der folgenden Werte verwenden:
Es ist ein wenig mühsamer als die Verwendung von between
, aber es stellt sicher, dass Sie nie einen Wert haben, der außerhalb des von Ihnen erwogenen Bereichs liegt.
Die wirkliche Mehrdeutigkeit ist wahrscheinlich mit Schaltsekunden und vielleicht mit Sommerzeit (aber ich weiß nicht, ob es welche gibt Fall, in dem es um Mitternacht wechselt oder nicht).
Wie auch immer, für den üblichen Fall gibt es nur wenige Lösungen:
%Vor%Einige kleine Kuriositäten, wenn Sie Timestamps verwenden:
TRUNC
konvertiert den Wert automatisch in DATE
; NUMBER
zu / von TIMESTAMP
wird auch DATE
erzeugt.
Einzelheiten finden Sie Datetime / Interval Arithmetic .