sql >> Database >  >> RDS >> Oracle

Oracle TO_DATE met alleen tijdinvoer zal een datumcomponent toevoegen op basis van welke logica?

Een datatype waarde van datum heeft altijd datum- en tijdcomponenten. als u alleen het tijdgedeelte van de datetime-waarde opgeeft zoals u deed, wordt het datumgedeelte standaard ingesteld op de eerste dag van de huidige maand.

Hier is een van de plaatsen (7e alinea) in de Oracle-documentatie waar dit gedrag is gedocumenteerd.

Er is ook ongedocumenteerde TIME letterlijk en TIME gegevenstype (moet worden ingeschakeld via 10407 (datetime TIME datatype creation) event) als u alleen tijd wilt gebruiken en opslaan, zonder datumgedeelte.

Hier is een kleine demonstratie van het gebruik van time letterlijk en time data type. Maar nogmaals, het is een ongedocumenteerde en niet-ondersteunde functie.

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

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

U kunt letterlijke tijd gebruiken zonder 10407 in te schakelen gebeurtenis, maar om een ​​kolom van time . te kunnen definiëren gegevenstype de 10407 evenement moet worden ingeschakeld:

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 kunnen we een tabel maken met een kolom van time gegevenstype:

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. Hoe bepaal je het aantal dagen in een maand in SQL Server?

  2. mysql:selecteren, invoegen, verwijderen en bijwerken in één query

  3. Dynamisch een database doorzoeken om te controleren op waarde

  4. Resultaten interpreteren van Explain Analyse in Postgres