Ett värde för datumdatatypen har alltid datum- och tidskomponenter. om du endast anger tidsdelen av datetime-värdet som du gjorde, är datumdelen som standard den första dagen i den aktuella månaden.
Här är en av platserna (7:e stycket) i Oracle-dokumentationen där detta beteende dokumenteras.
Det finns också odokumenterad TIME
literal och TIME
datatyp (måste aktiveras via 10407
(datetime TIME datatype creation) händelse) om du behöver använda och lagra bara tid, utan datumdel.
Här är en liten demonstration av hur du använder time
literal och time
data typ. Men återigen är det en odokumenterad och ostödd funktion.
SQL> select time '11:32:00' as res
2 from dual;
res
------------------------
11.32.00.000000000 AM
Du kan använda time literal utan att aktivera 10407
händelse, men för att kunna definiera en kolumn med time
datatyp 10407
händelsen måste vara aktiverad:
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.
Nu kan vi skapa en tabell med kolumnen time
datatyp:
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.