Думаю, вас беспокоит уровень презентации. Если вы хотите отформатировать эти значения, используйте TO_CHAR
и соответствующую маску форматирования. Например:
SQL> create table test (ts_ex timestamp, dt_ex date);
Table created.
SQL> insert into test values (systimestamp, sysdate);
1 row created.
Это то, что возвращают настройки NLS по умолчанию:
SQL> select * from test;
TS_EX DT_EX
------------------------------ ----------
11.10.19 12:50:05,468126 11.10.2019
Если вы хотите другой формат, скажите так:
SQL> select to_char(ts_ex, 'dd-mm-yy hh:mi:ss:ff am') tx,
2 to_char(dt_ex, 'dd.mm.yyyy hh24:mi:ss') dx
3 from test;
TX DX
------------------------------ -------------------
11-10-19 12:50:05:468126 PM 11.10.2019 12:50:05
SQL>
По состоянию на 2012 : на самом деле это не имеет значения. Еще раз: вам нужна презентация, а не способ хранения данных в таблице (во внутреннем формате Oracle).
SQL> insert into test (ts_ex, dt_ex) values
2 (to_timestamp('21.02.2011', 'dd.mm.yyyy'),
3 to_date ('21.02.2011', 'dd.mm.yyyy'));
1 row created.
SQL> alter session set nls_date_format = 'dd-mm-yy';
Session altered.
SQL> alter session set nls_timestamp_format = 'dd-mm-yy hh:mi:ss:ff am';
Session altered.
SQL> select * from test;
TS_EX DT_EX
------------------------------ --------
21-02-11 12:00:00:000000 AM 21-02-11
SQL>
[РЕДАКТИРОВАТЬ: запуск кода из вашего комментария]
SQL> create table date_with_time (Timestamp_ex TIMESTAMP , Date_ex Date);
Table created.
SQL> insert into date_with_time values('21-feb-2019','21-feb-2019');
1 row created.
SQL> select * from date_with_time;
TIMESTAMP_EX DATE_EX
------------------------------ --------
21.02.20 19:00:00,000000 21.02.19
^^^^^
this is 2019, year
Как я уже говорил: не полагайтесь на неявное преобразование, управляйте процессом, используйте соответствующие функции с соответствующими масками формата.