Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle TO_DATE avec uniquement une entrée d'heure ajoutera un composant de date en fonction de quelle logique ?

Une valeur de type de données date a toujours des composants de date et d'heure. si vous spécifiez uniquement la partie heure de la valeur datetime comme vous l'avez fait, la partie date par défaut est le premier jour du mois en cours.

Voici l'un des endroits (7e paragraphe) dans la documentation Oracle où ce comportement est documenté.

Il y a aussi TIME non documenté littéral et TIME type de données (doit être activé via 10407 (événement datetime TIME datatype creation)) si vous avez besoin d'utiliser et de stocker uniquement l'heure, sans partie de date.

Voici une petite démonstration de l'utilisation de time littéral et time Type de données. Mais encore une fois, il s'agit d'une fonctionnalité non documentée et non prise en charge.

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

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

Vous pouvez utiliser l'heure littérale sans activer 10407 event, mais afin de pouvoir définir une colonne de time tapez les données 10407 l'événement doit être activé :

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.

Nous pouvons maintenant créer une table avec une colonne de time type de données :

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.