oracle insert only time

Vorrei inserire i dati in DB come ora, non come data. Se uso to_date('2012-08-31 07:39:33', 'YYYY-MM-DD HH24:MI:SS') aggiunge anche la data. Se uso to_date('09:34:00', 'HH24:MI:SS') aggiunge anno, mese, giorno, dal nulla: | Più tardi ho bisogno di ottenere righe in cui il tempo è compreso tra x e y, senza tenere conto dell’anno, del mese o del giorno. Come lo faccio? Grazie

Un tipo DATE include sempre il componente della data.

Un’opzione è continuare a utilizzare DATE e scrivere il codice per ignorare il componente della data. Per rendere le query efficienti in termini di tempo, è ansible creare un indice basato su funzioni su qualcosa come TO_CHAR( date_field, 'HH24:MI:SS' ) e utilizzare tale espressione nelle query.

In alternativa, è ansible utilizzare un campo NUMBER per memorizzare il numero di secondi da mezzanotte e scrivere le query in termini di ciò.

In alternativa alla soluzione date Dave, è ansible utilizzare un tipo di dati interval per la colonna:

 create table t42(id number, t interval day to second); insert into t42 (id, t) values(123, to_dsinterval('0 07:39:33')); insert into t42 (id, t) values(456, to_dsinterval('0 09:34:00')); select id from t42 where t between to_dsinterval('0 07:00:00') and to_dsinterval('0 07:59:59'); ID ---------- 123 

La visualizzazione degli intervalli è un po ‘scomoda in quanto non hanno modelli di formato , ma vedi questa domanda per alcune idee se necessario. Se li usi solo per il filtraggio, questo potrebbe non essere affatto un problema.

puoi usare il tipo di colonna numerica e inserire il valore come

 INSERT INTO table_name (nTime) VALUES (date - trunc(date)); 

e quindi selezionare i valori

 select * from table_name t where t.nTime between (10 / 24 + 15 / 24 / 60) and (12 / 24 + 30 / 24 / 60) --between 10:15 and 12:30