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?
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));
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'
Personnellement, je vais habituellement avec:
select *
from t1
where date between trunc( :somedate ) -- 00:00:00
and trunc( :somedate ) + .99999 -- 23:59:59
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
Essayez de la manière suivante.
Select * from t1 where date(col_name)="8/3/2010"
trunc(my_date,'DD')
vous donnera simplement la date et pas l'heure dans Oracle.