我将值插入此表
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');
我插入的第二个日期不允许列中的错误,但不是第一个。我试过在日期周围加上引号,但我只是得到了另一个错误。
答案 0 :(得分:7)
' 14-NOV-2014'
为什么要在 DATE 列中插入字符串? '14-NOV-2014'
是 STRING ,不 DATE 。您不应该依赖隐式数据类型转换。
始终使用 TO_DATE 和正确的格式掩码将字符串明确转换为DATE。
例如,
TO_DATE('14-NOV-2014','DD-MON-YYYY')
还有一件事,
DepartureTime varchar2(5)
没有任何意义。您已经有DATE列,DATE也有时间元素。
无需单独的时间栏。 DATE的日期和时间元素都以7个字节存储。
Oracle将DATE存储为总共7个字节。其中的每个字节都存储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 literal,例如:
timestamp '2014-11-14 22:15'