1

我在这个表中插入值

    CREATE TABLE Flight ( 
    FlightNumber         char(7) primary key,
    ArrivalAirportCode   char(6)   references Airport  (Airport_code),
    DepartureAirportCode char(6)   references Airport  (Airport_code),
    AircraftNumber       varchar2(25) references Aircraft (AircraftNumber),
    ArrivalDate          date,
    ArrivalTime          Varchar2(5),
    DepartureDate        date,
    DepartureTime        varchar2(5)
    ); 

这是我插入其中的值

   INSERT INTO FLIGHT values
   ('CA3048',
   'LHR', 
   'EDI',
   'N859E',
   '14-NOV-2014',
   '22:15', 
   '14-NOV-2014', 
   '20:15');

而且我在插入的第二个日期出现了此处不允许的列错误,但不是第一个。我试过在日期周围加上引号,但我得到了另一个错误。

4

1 回答 1

7

'2014 年 11 月 14 日'

为什么要在DATE列中插入字符串?'14-NOV-2014'STRING不是DATE。_ 您不应依赖隐式数据类型转换

始终,使用TO_DATE和正确的格式掩码将字符串显式转换为 DATE 。

例如,

TO_DATE('14-NOV-2014','DD-MON-YYYY')

还有一件事,

出发时间 varchar2(5)

没有意义。您已经有一个 DATE 列,一个 DATE 也会有时间元素。

不需要单独的时间列。DATE 具有存储在 7 个字节中的日期和时间元素。

Oracle 总共存储 7 个字节的 DATE。其中的每个字节都存储 DATE 元素的值,如下所示:

Byte    Description
----    ------------------------------------------------
1       Century value but before storing it add 100 to it
2       Year and 100 is added to it before storing
3       Month
4       Day of the month
5       Hours but add 1 before storing it
6       Minutes but add 1 before storing it
7       Seconds but add 1 before storing it

您需要做的只是拥有2 个 DATE 列

CREATE TABLE Flight ( 
    FlightNumber         char(7) primary key,
    ArrivalAirportCode   char(6)   references Airport  (Airport_code),
    DepartureAirportCode char(6)   references Airport  (Airport_code),
    AircraftNumber       varchar2(25) references Aircraft (AircraftNumber),
    ArrivalDate          date,
    DepartureDate        date
);

然后将值插入为:

INSERT INTO FLIGHT values
   ('CA3048',
   'LHR', 
   'EDI',
   'N859E',
   TO_DATE('14-NOV-2014 22:15:00','DD-MON-YYYY HH24:MI:SS'),
   TO_DATE('14-NOV-2014 20:15:00','DD-MON-YYYY HH24:MI:SS')
);

更新

正如@GriffeyDog 和@a_horse_with_no_name 在评论中提到的那样。

或者,您也可以使用ANSI 文字,例如:

timestamp '2014-11-14 22:15'
于 2015-04-13T15:06:17.967 回答