尝试过:
INSERT INTO Airplanes
VALUES (1, 'Boeing 720-020', 'New York', TO_DATE('17:30', 'HH24:MI'), 219);
但是运行它之后,在表中我有10/01/2018
而不是17:30
。
非常感谢您的帮助。
答案 0 :(得分:4)
DATE实际上是日期时间数据类型。没有TIME数据类型。因此,如果您只想存储时间,则需要使用字符串。
create table airplane (
id number primary key
, plane_type varchar2(32) not null
, destination varchar2(32) not null
, flight_time varchar2(5) not null check (regexp_like(flight_time, '[0-9]{2}:[0-9]{2}'))
)
/
检查约束强制采用99:99
的格式。您可以根据需要将其设置为更严格。
我对@AlexPoole表示同情,我们应该使用DATE列来存储时间,因为这样做确实可以更轻松地确保仅输入有效时间。但是然后我们必须限制日期部分,以确保它始终是相同的魔术日期,并且每当查询表以确保它仅显示时间时,我们总是必须应用格式掩码。因此,我们获得了一些东西,但同时也失去了一些东西。
还有更多巴洛克式的解决方案。您可以将flight_time定义为间隔:
, flight_time interval day to second
那么您的插入语句应为
insert into airplane
values (1, 'Boeing 720-020','New York',INTERVAL '0 17:30:0' DAY TO SECOND);
您仍然需要检查DAY元素是否为零。而且我认为查询的输出仍需要格式化。
但是我怀疑我们正在对似乎是课程作业的项目进行过度设计。因此,请坚持使用字符串,除非您需要更好的东西,
答案 1 :(得分:2)
您可以尝试使用to_char函数。
示例:
SELECT TO_CHAR(SYSDATE,'HH24:MI') FROM DUAL;
答案 2 :(得分:0)
您可以按照显示的时间存储时间:
TO_DATE('17:30', 'HH24:MI')
您的表Airplanes
包含一列date
数据类型(实际上,日期和时间为stated by APC),您试图在其中存储该时间。您的时间确实已存储,但是带有未指定的日期,并且默认为当前月份的第一天。
您唯一的问题是Oracle select
编辑日期时显示了日期。因此,要解决此问题,只需使用to_char()
仅以特定格式显示时间即可,例如:
select to_char(column_name,'HH24:MI') from Airplanes;
如果您沿着这条路走,我建议您也存储该时间的日期,以免记录中没有多余的日期。因此,例如,如果您要存储飞行时间,则还要将飞行日期存储在同一列上,如下所示:
TO_DATE('2018-10-17 17:30', 'YYYY-MM-DD HH24:MI')
此外,请使用date
数据类型,以便您可以利用内置的日期/时间功能,例如轻松地以特定格式显示时间。