it-swarm.com.de

Oracle: Wie kann ich NUR von gestern Datensätze auswählen?

Ich habe Stunden damit verbracht, im Internet nach einer Antwort auf diese Frage zu suchen ...

Folgendes habe ich momentan:

select  *
from    order_header oh
where   tran_date = sysdate-1

Danke im Voraus.

34
Keith Myers

Benutzen:

AND oh.tran_date BETWEEN TRUNC(SYSDATE - 1) AND TRUNC(SYSDATE) - 1/86400

Referenz: TRUNC

Das Aufrufen einer Funktion in tran_date bedeutet, dass das Optimierungsprogramm keinen Index verwenden kann (vorausgesetzt, dass ein Index vorhanden ist). Einige Datenbanken, z. B. Oracle, unterstützen funktionsbasierte Indizes, die die Ausführung von Funktionen für die Daten ermöglichen, um die Auswirkungen in solchen Situationen zu minimieren. IME-Datenbankadministratoren erlauben dies jedoch nicht. Und ich stimme zu - sie sind in diesem Fall nicht wirklich notwendig.

64
OMG Ponies
trunc(tran_date) = trunc(sysdate -1)
14
Henry Gao

Dieser Kommentar ist für Leser gedacht, die diesen Eintrag gefunden haben, aber mysql anstelle von Oracle! Verwenden. Bei mysql können Sie Folgendes tun: Today

SELECT  * 
FROM 
WHERE date(tran_date) = CURRENT_DATE()

Gestern

SELECT  * 
FROM yourtable 
WHERE date(tran_date) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
1
netsuvi
to_char(tran_date, 'yyyy-mm-dd') = to_char(sysdate-1, 'yyyy-mm-dd')
1

Wenn Sie zukünftige Transaktionen mit Datum nicht unterstützen, kann dies folgendermaßen funktionieren:

AND oh.tran_date >= trunc(sysdate-1)
1
ninesided

Wenn Sie den Zeitstempel für gestern wünschen, versuchen Sie Folgendes:

(CURRENT_TIMESTAMP - INTERVAL '1' DAY)
0
Aliuk