Дата объединяется в формате времени - PullRequest
0 голосов
/ 11 октября 2019

когда я вставляю данные в таблицу, имеющую тип данных TIMESTAMP. дата объединяется в формате времени. Эта проблема возникает, когда я вставляю дату ниже 2013 или 2011 года. Я также пытался изменить форматы NLS, но у меня не получилось.

Есть ли альтернатива метки времени в Oracle? ,Однако я могу вставить с помощью to_date и получить удовлетворительный вывод, но мне нужно вставить '21 -feb-2011 'и мне нужен вывод '21 -02-11 00: 00: 00.000000000 AM 21-02-11'

create table date_with_time (Timestamp_ex TIMESTAMP , Date_ex Date);

insert into date_with_time values('21-feb-2011','21-feb-2011');

select * from date_with_time;

Результат:

Timestamp_ex 
21-02-20 11:00:00.000000000 AM      

Date_ex 
21-02-11

Фактический результат: Результат:

Timestamp_ex                    
21-02-20 11:00:00.000000000 AM  

Date_ex 
21-02-11

Ожидаемый результат:

Timestamp_ex

21-02-11 00:00:00.000000000 AM     

Date_ex  

21-02-11

1 Ответ

1 голос
/ 11 октября 2019

Думаю, вас беспокоит уровень презентации. Если вы хотите отформатировать эти значения, используйте 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

Как я уже говорил: не полагайтесь на неявное преобразование, управляйте процессом, используйте соответствующие функции с соответствующими масками формата.

...