(SQL) проблема с вычитанием 48 часов от даты в прямом эфире SQL oracle - PullRequest
1 голос
/ 04 апреля 2020

У меня есть таблица Flight и мне нужно вычислить check_in до вылета (-48 часов, то есть за 2 дня до вылета) в Live SQL. Я понятия не имею, как это сделать. Спасибо всем большое!

     crate table Flight (
                  number_flight varchar2(10),
                  departure date,
                  arrival date,
                  check_in Check_in);



    CREATE OR REPLACE TYPE Check_In AS OBJECT (
        departure DATE,
        MEMBER FUNCTION comput_check_in RETURN date?
    ) NOT FINAL;


    CREATE OR REPLACE TYPE BODY Check_In AS
        MEMBER FUNCTION comput_check_in RETURN date? AS
    BEGIN
        RETURN  DATEADD('hour' , -48 , departure) ;
    END;

insert into flight values ('AA1234',
                       to_date('26/MAR/2020 03:10 PM', 'DD/MM/YYYY HH12:MI AM'),
                       to_date('27/MAR/2020 09:30 AM', 'DD/MM/YYYY HH12:MI AM'), 
                       comput_check_in(to_date('26/MAR/2020 03:10 PM', 'DD/MM/YYYY HH12:MI AM'))));
     select * from Flight

Ответы [ 2 ]

2 голосов
/ 04 апреля 2020

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

create table flight
( number_flight  varchar2(10) constraint flight_pk primary key
, departure      date
, arrival        date
, check_in       as (departure -2) );

insert into flight
( number_flight
, departure
, arrival )
values
( 'FR8321'
, to_date('2020-05-14 07:15', 'YYYY-MM-DD HH24:MI')
, to_date('2020-05-14 10:45', 'YYYY-MM-DD HH24:MI') );

select * from flight;

NUMBER_FLIGHT DEPARTURE         ARRIVAL           CHECK_IN
------------- ----------------- ----------------- -----------------
FR8321        14-MAY-2020 07:15 14-MAY-2020 10:45 12-MAY-2020 07:15
2 голосов
/ 04 апреля 2020

Oracle имеет оператор - между датой и числом, представляющим дни для вычитания:

INSERT INTO flight VALUES
('AA1234',
 TO_DATE('26/MAR/2020 03:10 PM', 'DD/MM/YYYY HH12:MI AM'),
 TO_DATE('27/MAR/2020 09:30 AM', 'DD/MM/YYYY HH12:MI AM'), 
 TO_DATE('26/MAR/2020 03:10 PM', 'DD/MM/YYYY HH12:MI AM') - 2 -- Here!
);
...