Sélectionner dans le tableau en sachant seulement date sans temps (ORACLE)

j'essaie de récupérer des enregistrements à partir de la table en sachant la date dans la colonne contient la date et l'heure.

supposons que j'ai un tableau appelé t1 qui ne contient que deux colonnes name et date respectivement.

les données stockées dans la date de la colonne comme ce 8/3/2010 12:34:20 PM .

je veux récupérer cet enregistrement par cette requête par exemple (notez que je ne mets pas l'heure):

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

Cette requête ne me donne rien !

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

41
demandé sur Mark 2010-03-08 09:56:11
la source

7 ответов

DATE est un mot-clé réservé dans Oracle, donc j'utilise le nom de colonne your_date à la place.

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')

Si il n'y a pas d'index ou si il n'y a pas trop d'enregistrements

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

devrait suffire. TRUNC sans paramètre supprime les heures, les minutes et les secondes à partir d'un DATE .


si la performance a vraiment de l'importance, pensez à inscrire un Function Based Index dans cette colonne:

CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date));
80
répondu Peter Lang 2010-03-08 11:24:21
la source

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épondu R. Genaro 2010-03-08 15:25:39
la source

vous pouvez utiliser la fonction between pour obtenir tous les enregistrements entre 2010-08-03 00:00:00: 000 et 2010-08-03 23:59:59:000

2
répondu Dustin Laine 2010-03-08 10:58:09
la source

Convertissez votre colonne date au bon format 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')

résultera en chaîne de caractères '8/3/2010'

2
répondu user648026 2012-10-19 22:58:23
la source

essayez de la façon suivante.

Select * from t1 where date(col_name)="8/3/2010" 
0
répondu kiruthika 2010-03-08 10:26:50
la source

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

0
répondu Dave Kuziara 2017-06-21 12:01:40
la source

je pense que nous devrions être utilisé trunc(date)

0
répondu Khang Dq 2018-08-23 05:15:29
la source

Autres questions sur