Oracle: Wie aktuelles Datum (Heute) vor Mitternacht auswählen?

7

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?).

    
gaboroncancio 03.10.2014, 16:00
quelle

3 Antworten

10

Um das aktuelle Datum (Heute) vor Mitternacht (eine Sekunde vorher) auszuwählen, können Sie eine der folgenden Aussagen verwenden:

%Vor%

Was es macht:

  1. Summe eines Tages zu SYSDATE : SYSDATE + 1 , jetzt ist das Datum Morgen
  2. Entferne den Zeitteil des Datums mit TRUNC , jetzt ist das Datum morgen um 00:00
  3. Subtrahiere eine Sekunde vom Datum: - 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%
  1. Entfernen Sie den Zeitteil des aktuellen Datums mit TRUNC , jetzt ist das Datum Heute um 00:00
  2. Fügen Sie ein Zeitintervall von 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%     
gaboroncancio 03.10.2014, 16:00
quelle
6

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:

%Vor%

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.

    
Allan 03.10.2014 18:05
quelle
3

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 ;
  • Durch das Hinzufügen / Subtrahieren von NUMBER zu / von TIMESTAMP wird auch DATE erzeugt. Einzelheiten finden Sie Datetime / Interval Arithmetic .
%Vor%     
Sylvain Leroux 03.10.2014 16:20
quelle

Tags und Links