J'ai passé des heures à chercher sur le Web une réponse à cette question ...
Voici ce que j'ai actuellement:
select *
from order_header oh
where tran_date = sysdate-1
Merci d'avance.
Utilisation:
AND oh.tran_date BETWEEN TRUNC(SYSDATE - 1) AND TRUNC(SYSDATE) - 1/86400
Référence: TRUNC
L'appel d'une fonction sur le tran_date
signifie que l'optimiseur ne pourra pas utiliser d'index (en supposant qu'il en existe un) qui lui est associé. Certaines bases de données, telles qu'Oracle, prennent en charge les index basés sur les fonctions qui permettent d'exécuter des fonctions sur les données afin de minimiser l'impact dans de telles situations, mais les administrateurs de base de données IME ne le permettent pas. Et je suis d'accord - ils ne sont pas vraiment nécessaires dans ce cas.
trunc(tran_date) = trunc(sysdate -1)
Ce commentaire est destiné aux lecteurs qui ont trouvé cette entrée mais qui utilisent mysql au lieu d'Oracle! Sur mysql, vous pouvez effectuer les opérations suivantes: Aujourd'hui
SELECT *
FROM
WHERE date(tran_date) = CURRENT_DATE()
Hier
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')
Si vous ne prenez pas en charge les transactions datées ultérieurement, cela pourrait fonctionner:
AND oh.tran_date >= trunc(sysdate-1)
Si vous voulez l’horodatage d’hier, essayez quelque chose comme:
(CURRENT_TIMESTAMP - INTERVAL '1' DAY)