web-dev-qa-db-fra.com

Sélectionner dans le tableau en ne connaissant que la date sans heure (Oracle)

J'essaie de récupérer des enregistrements d'une table en sachant que la date dans la colonne contient la date et l'heure.

Supposons que j'ai une table appelée t1 qui ne contient que deux colonnes name et date respectivement.

Les données stockées dans la date de colonne ressemblent à ceci 8/3/2010 12:34:20 PM.

Je veux récupérer cet enregistrement par cette requête par exemple (note je ne mets pas le temps):

Select * From t1 Where date="8/3/2010"

Cette requête ne me donne rien! 

Comment puis-je récupérer date en ne connaissant que date sans le temps?

44
Abdulrhman

DATE est un mot clé réservé dans Oracle. J'utilise plutôt le nom de colonne your_date.

Si vous avez un index sur your_date, j'utiliserais

WHERE your_date >= TO_DATE('2010-08-03', 'YYYY-MM-DD')
  AND your_date <  TO_DATE('2010-08-04', 'YYYY-MM-DD')

ou BETWEEN:

WHERE your_date BETWEEN TO_DATE('2010-08-03', 'YYYY-MM-DD')
                    AND TO_DATE('2010-08-03 23:59:59', 'YYYY-MM-DD HH24:MI:SS')

S'il n'y a pas d'index ou s'il n'y a pas trop d'enregistrements

WHERE TRUNC(your_date) = TO_DATE('2010-08-03', 'YYYY-MM-DD')

devrait être suffisant. TRUNC sans paramètre supprime les heures, minutes et secondes d'une DATE.


Si la performance compte vraiment, pensez à mettre un Function Based Index dans cette colonne:

CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date));
84
Peter Lang

Convertissez votre colonne de date au format correct et comparez:

SELECT * From my_table WHERE to_char(my_table.my_date_col,'MM/dd/yyyy') = '8/3/2010'

Cette partie

to_char(my_table.my_date_col,'MM/dd/yyyy')

Entraînera la chaîne '8/3/2010'

3
user648026

Personnellement, je vais habituellement avec:

select * 
from   t1
where  date between trunc( :somedate )          -- 00:00:00
            and     trunc( :somedate ) + .99999 -- 23:59:59
3
R. Genaro

Vous pouvez utiliser la fonction between pour obtenir tous les enregistrements du 2010-08-03 00: 00: 00: 000 À 2010-08-03 23: 59: 59: 000

2
Dustin Laine

Essayez de la manière suivante.

Select * from t1 where date(col_name)="8/3/2010" 
0
kiruthika

trunc(my_date,'DD') vous donnera simplement la date et pas l'heure dans Oracle.

0
Dave Kuziara