sql >> Databasteknik >  >> RDS >> Oracle

Oracle TO_DATE med endast tidsinmatning kommer att lägga till datumkomponent baserat på vilken logik?

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.



  1. Sekvensnummer i tabell

  2. Att använda MySqlConnection (.NET) för att SSL-ansluta till MySql-server misslyckas från vissa klienter

  3. Stream hämtat från Postgres med jOOQ som inte returnerar resultat från klassen

  4. är en temporär mysql-tabell unik för varje användare som kommer åt skriptet som skapar den...?