Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O Oracle TO_DATE com apenas a entrada de hora adicionará o componente de data com base em qual lógica?


Um valor do tipo de dados de data sempre tem componentes de data e hora. se você especificar apenas a parte de hora do valor de data e hora como fez, a parte de data será padronizada para o primeiro dia do mês atual.

Aqui está um dos lugares (7º parágrafo) na documentação do Oracle onde esse comportamento está documentado.

Também há TIME não documentado literal e TIME tipo de dados (precisa ser ativado via 10407 (evento de criação de tipo de dados datetime TIME)) se você precisar usar e armazenar apenas a hora, sem parte da data.

Aqui está uma pequena demonstração do uso de time literal e time tipo de dados. Mas, novamente, é um recurso não documentado e sem suporte.
SQL> select time '11:32:00' as res
  2    from dual;

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

Você pode usar o literal de tempo sem ativar 10407 evento, mas para poder definir uma coluna de time tipo de dados o 10407 evento precisa ser ativado:
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.

Agora podemos criar uma tabela com uma coluna de time tipo de dados:
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.