Извлечение данных в SQL с помощью недавно созданного столбца с датой и временем - PullRequest
0 голосов
/ 11 октября 2019

Я использую Oracle SQL Developer для извлечения данных из базы данных. Существует столбец отметки времени в этом формате: 02-SEP-19 10.31.34.315000000 AM, но я хотел бы создать 2 новых столбца, один для даты (02/09/19) и один для времени в формате 24H.

Есть ли способ извлечь всю таблицу вместе с вновь созданными столбцами? Причина, по которой мне нужны 2 дополнительных столбца с датой и временем, заключается в сравнении с другим набором данных.

Это позволило бы мне извлекать данные с определенным диапазоном дат и временем. Например, все записи с 01 сентября по 30 сентября 19 и с 08:00:00 до 10:00:00.

Select * 
From Table 
Where CRT_DTTM > '02-SEP-19' and CRT_DTTM < '03-SEP-19'
order by CRT_DTTM ASC

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

Добавление новых столбцов только потому, что "это облегчает ...", редко работает хорошо. Это должно быть значительно проще, если рассматривать ALL . Кроме того, вы рассматривали возможность объединения других столбцов таблиц для создания фактической даты или отметки времени. Тем не менее, иногда есть, чтобы съесть свой торт и съесть его тоже! Добавьте ваши 2 столбца, но сделайте их виртуальными столбцами. Таким образом, ничего, что в данный момент обрабатывает существующий столбец, не нужно менять, и вы получаете столбцы только с датой и временем. Недостаток: это символы, так как ВСЕ столбцы даты (временной отметки) оракула содержат компоненты даты и времени.

create table  atable( atable_ts timestamp); 

insert into atable values (current_timestamp);
insert into atable values (current_timestamp - interval '6' hour);
insert into atable values (current_timestamp + interval '9' hour);

select * from atable;

alter table atable add (atable_day  generated always as 
                                    (  to_char(extract(year from atable_ts) ) || '-'   
                                    || to_char(extract(month from atable_ts) ) || '-' 
                                    || to_char(extract(day from atable_ts) ) ) 
                        ,atable_tod  generated always as 
                                     ( to_char(extract(hour from atable_ts) ) || ':'   
                                    || to_char(extract(minute from atable_ts) ) || ':' 
                                    || to_char(extract(second from atable_ts) ) )
                         );        

select * from atable; 
0 голосов
/ 11 октября 2019

Например, для всех записей с 01-SEP-19 по 30-SEP-19 и с 08:00:00 до 10: 00: 00.

Вам не нужноотдельный столбец, просто включите логику извлечения времени в запрос. Неэффективно поддерживать другой столбец для хранения только времени.

 Select * 
   From Table 
     Where CRT_DTTM >= DATE '2019-09-01' and CRT_DTTM < DATE '2019-09-30'
     AND extract(hour from CRT_DTTM) >=8 and extract(hour from CRT_DTTM) < 10
 order by CRT_DTTM ASC

Если вы хотите более конкретное время, просто используйте TO_TIMESTAMP с началоми желаемое время окончания.

Например:

WHERE CRT_DTTM >= TO_TIMESTAMP('01-SEP-2019 08:20:00','dd-mon-yyyy hh24:mi:ss') 
..
..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...