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.
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.
trunc(tran_date) = trunc(sysdate -1)
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)
to_char(tran_date, 'yyyy-mm-dd') = to_char(sysdate-1, 'yyyy-mm-dd')
Wenn Sie zukünftige Transaktionen mit Datum nicht unterstützen, kann dies folgendermaßen funktionieren:
AND oh.tran_date >= trunc(sysdate-1)
Wenn Sie den Zeitstempel für gestern wünschen, versuchen Sie Folgendes:
(CURRENT_TIMESTAMP - INTERVAL '1' DAY)