sql >> Base de Datos >  >> RDS >> Oracle

Oracle TO_DATE con solo entrada de tiempo agregará el componente de fecha según qué lógica?

Un valor de tipo de datos de fecha siempre tiene componentes de fecha y hora. si especifica solo la parte de la hora del valor de fecha y hora como lo hizo, la parte de la fecha se establece de forma predeterminada en el primer día del mes actual.

Este es uno de los lugares (párrafo 7) en la documentación de Oracle donde se documenta este comportamiento.

También hay TIME no documentado literal y TIME tipo de datos (debe habilitarse a través de 10407 (evento de creación de tipo de datos datetime TIME)) si necesita usar y almacenar solo tiempo, sin parte de fecha.

Aquí hay una pequeña demostración del uso de time literal y time tipo de datos. Pero, de nuevo, es una función no documentada y no admitida.

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

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

Puede usar el literal de tiempo sin habilitar 10407 evento, pero para poder definir una columna de time tipo de datos el 10407 el evento debe estar habilitado:

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.

Ahora podemos crear una tabla con una columna de time tipo de datos:

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.