Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle TO_DATE con l'input solo dell'ora aggiungerà il componente della data in base a quale logica?

Un valore di tipo di dati data ha sempre componenti di data e ora. se specifichi solo la parte dell'ora del valore datetime come hai fatto, la parte della data per impostazione predefinita è il primo giorno del mese corrente.

Ecco uno dei posti (7° paragrafo) nella documentazione Oracle in cui è documentato questo comportamento.

C'è anche TIME non documentato letterale e TIME tipo di dati (deve essere abilitato tramite 10407 (datetime TIME datatype creation) evento) se è necessario utilizzare e memorizzare solo l'ora, senza la parte data.

Ecco una piccola dimostrazione dell'utilizzo di time letterale e time tipo di dati. Ma ancora una volta è una funzione non documentata e non supportata.

SQL> select time '11:32:00' as res
  2    from dual;

res 
------------------------  
11.32.00.000000000 AM      

Puoi usare il valore letterale temporale senza abilitare 10407 evento, ma per poter definire una colonna di time digitare il 10407 l'evento deve essere abilitato:

SQL> create table time_table(time_col time);
create table time_table(time_col time)
                                 *
ERROR at line 1:
ORA-00902: invalid datatype   

-- enable 10407 event 
SQL> alter session set events '10407 trace name context forever, level 1';

Session altered.

Ora possiamo creare una tabella con una colonna di time tipo di dati:

SQL> create table time_table(time_col time);

Table created.


SQL> insert into time_table(time_col)
  2    values(time '11:34:00');

1 row created.

SQL> select * from time_table;

TIME_COL 
--------------- 
11.34.00 AM

SQL> alter session set events '10407 trace name context off';

Session altered.