web-dev-qa-db-fra.com

Oracle SQL: horodatage dans la clause where

Je dois rechercher des lignes dans une période donnée.

select * 
from TableA 
where startdate >= '12-01-2012 21:24:00' 
  and startdate <= '12-01-2012 21:25:33'

C'est-à-dire que je dois rechercher des lignes avec une précision d'horodatage de SECONDS. Comment puis-je y arriver?

FYI: La colonne startdate est de type TIMESTAMP.

47
sid

to_timestamp ()

Vous devez utiliser to_timestamp() pour convertir votre chaîne en une valeur timestamp appropriée:

to_timestamp('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss')

à ce jour()

Si votre colonne est de type DATE (qui prend également en charge les secondes), vous devez utiliser to_date()

to_date('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss')

Exemple

Pour insérer ceci dans une condition where, utilisez ce qui suit:

select * 
from TableA 
where startdate >= to_timestamp('12-01-2012 21:24:00', 'dd-mm-yyyy hh24:mi:ss')
  and startdate <= to_timestamp('12-01-2012 21:25:33', 'dd-mm-yyyy hh24:mi:ss')

Remarque

Vous n'avez jamais besoin d'utiliser to_timestamp() sur une colonne de type timestamp.

101

Pour tout le monde qui vient à ce fil avec quelques secondes dans votre horodatage, utilisez:

to_timestamp('2018-11-03 12:35:20.419000', 'YYYY-MM-DD HH24:MI:SS.FF')

4
jyapx