Wartość typu danych date zawsze zawiera składniki daty i godziny. jeśli określisz tylko część czasu w wartości daty i czasu, tak jak to zrobiłeś, część daty zostanie domyślnie ustawiona na pierwszy dzień bieżącego miesiąca.
Oto jedno z miejsc (7 akapit) w dokumentacji Oracle, gdzie udokumentowano to zachowanie.
Istnieje również nieudokumentowany TIME
literał i TIME
typ danych (musi być włączony przez 10407
(datetime TIME datatype creation) event) jeśli potrzebujesz używać i przechowywać tylko czas, bez części daty.
Oto mała demonstracja używania time
literał i time
typ danych. Ale znowu jest to nieudokumentowana i nieobsługiwana funkcja.
SQL> select time '11:32:00' as res
2 from dual;
res
------------------------
11.32.00.000000000 AM
Możesz użyć literału czasu bez włączania 10407
zdarzenie, ale aby móc zdefiniować kolumnę time
wpisz dane 10407
wydarzenie musi być włączone:
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.
Teraz możemy stworzyć tabelę z kolumną time
typ danych:
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.