web-dev-qa-db-fra.com

Oracle obtient les enregistrements de la veille

Ok, je pense que je vais avoir l'année précédente au lieu de la veille, mais je dois passer à la veille.

SELECT TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1 FROM Dual

Je le compare à un tampon date/heure dans ce format et souhaite obtenir toutes les lignes du jour précédent.

YYYY-MM-DD HH:MM:SS

Donc j'essaie quelque chose comme ça

SELECT field,datetime_field 
FROM database
WHERE datetime_field > TO_DATE(TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'),'YYYY-MM-DD') - 1
12
Phill Pafford

que diriez-vous de sysdate?

SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)
27
Eric Schneider

Vous pouvez supprimer la partie heure d'une date en utilisant TRUNC.

select field,datetime_field 
  from database
 where datetime_field >= trunc(sysdate-1,'DD');

Cette requête vous donnera toutes les lignes avec des dates à partir de hier. Notez le deuxième argument à trunc(). Vous pouvez utiliser ceci pour tronquer une partie de la date. 

Si votre date-heure contient '2011-05-04 08:23:54', la date suivante sera retournée

trunc(datetime_field, 'HH24') => 2011-05-04 08:00:00
trunc(datetime_field, 'DD')   => 2011-05-04 00:00:00
trunc(datetime_field, 'MM')   => 2011-05-01 00:00:00
trunc(datetime_field, 'YYYY') => 2011-00-01 00:00:00
4
Ronnis
SELECT field,datetime_field 
FROM database
WHERE datetime_field > (CURRENT_DATE - 1)

Sa fait un certain temps que j'ai travaillé sur Oracle. Mais, je pense que cela devrait fonctionner.

2
shahkalpesh

ce 

    SELECT field,datetime_field 
FROM database
WHERE datetime_field > (sysdate-1)

marchera. La question est la suivante: le champ datetime est-il identique à sysdate? Ma manière de gérer cela: utilisez la fonction 'to_char ()' (ne fonctionne que sous Oracle).

échantillons: jour précédent :

select your_column
from your_table
where to_char(sysdate-1, 'dd.mm.yyyy')

ou

select extract(day from date_field)||'/'|| 
       extract(month from date_field)||'/'||
       extract(year from date_field)||'/'||
as mydate
from dual(or a_table)
where extract(day from date_field) = an_int_number and
      extract(month from date_field) = an_int_number and so on..

date de comparaison :

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate, 'dd.mm.yyyy')

intervalle de temps entre hier et un jour avant-hier:

select your_column
from your_table
where
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-1, 'dd.mm.yyyy') and
to_char(a_datetime_column, 'dd.mm.yyyy') > or < or >= or <= to_char(sysdate-2, 'dd.mm.yyyy')

autre plage de temps variation

select your_column
from your_table
where 
to_char(a_datetime_column, 'dd.mm.yyyy') is between to_char(sysdate-1, 'dd.mm.yyyy') 
and to_char(sysdate-2, 'dd.mm.yyyy')
2
ronaldo

Je pense que vous pouvez aussi exécuter cette commande:

sélectionnez (sysdate-1) PREVIOUS_DATE parmi dual;

0
Prashant