Im正在将值插入此表
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)
);
这是Im插入其中的值
INSERT INTO FLIGHT values
('CA3048',
'LHR',
'EDI',
'N859E',
'14-NOV-2014',
'22:15',
'14-NOV-2014',
'20:15');
我在这里得到了我插入的第二个日期不允许的列错误,但不是第一个。我试着在日期前后加引号,但我又犯了一个错误。
2014年11月14日
为什么要在DATE列中插入字符串?'14-NOV-2014'
是STRING,而NOT是日期。您不应该依赖隐式数据类型转换。
始终使用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_house_with_no_name在评论中提到的那样。
或者,您也可以使用ANSI文字,例如:
timestamp '2014-11-14 22:15'