0

我正在为与机场相关的任务制作一组表格,

CREATE TABLE FLIGHT
(FlightCode VARCHAR2(6),
AirplaneSerialNum VARCHAR2(6) NOT NULL,
RemCapacity NUMBER(3),
FlightDate DATE NOT NULL,
RouteNum NUMBER(5) NOT NULL,
FlightDeparture DATE,
FlightArrival DATE,
CONSTRAINT FlightPK PRIMARY KEY (FlightCode),
CONSTRAINT RouteFK FOREIGN KEY (RouteNum) REFERENCES ROUTE (RouteNum));

理想情况下,FlightDeparture 和 FlightArrival 以 24H 格式或 12H 格式 (HHMM) 进行引用,我应该如何编写它,以及如何在单独的表中创建一个列来引用之间的小时数差异(到 2dp。) FlightArrival 和 FlightDeparture?

例如,在另一个将 FLIGHT 中的 FlightCode 引用为 FK 的表中

HoursInFlight NUMBER(10,2)
where HoursInFlight = FlightArrival - FlightDeparture
4

1 回答 1

1

DATE数据类型看起来不错;它以 Oracle 的内部格式存储值,因此由您决定如何将它们显示给用户。例如:

插入:

SQL> create table flight (flight_date date);

Table created.

SQL> insert into flight (flight_date) values (sysdate);

1 row created.

SQL> insert into flight (flight_date) values (to_date('18.07.2021 16:58', 'dd.mm.yyyy hh24:Mi'));

1 row created.

选择(各种选项):

SQL> select * from flight;

FLIGHT_D
--------
18.07.21
18.07.21

SQL> select to_char(flight_date, 'dd-mon-yy hh:mi am', 'nls_date_language = english')) val from flight;
select to_char(flight_date, 'dd-mon-yy hh:mi am', 'nls_date_language = english')) val from flight
                                                                                *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected


SQL> select to_char(flight_date, 'dd-mon-yy hh:mi am', 'nls_date_language = english') val from flight;

VAL
---------------------------
18-jul-21 04:58 PM
18-jul-21 04:58 PM

SQL> select to_char(flight_date, 'dd/mm/yyyy hh24:mi:ss') val from flight;

VAL
-------------------
18/07/2021 16:58:36
18/07/2021 16:58:00

SQL> alter session set nls_Date_Format = 'yyyy-mm-dd hh:mi am';

Session altered.

SQL> select * from flight;

FLIGHT_DATE
-------------------
2021-07-18 04:58 PM
2021-07-18 04:58 PM

SQL>

两个DATE值之差是它们之间的天数,因此 - 如果您想将它们“转换”为小时,请将其乘以 24(因为一天有 24 小时):

SQL> select to_date('18.07.2021 17:02', 'dd.mm.yyyy hh24:mi') - to_date('18.07.2021 10:44', 'dd.mm.yyyy hh24:mi') diff
  2  from dual;

      DIFF
----------
     ,2625

SQL> select 0.2625 * 24 hours from dual;

     HOURS
----------
       6,3

SQL>
于 2021-07-18T15:05:57.607 回答