如何仅将小时和分钟插入表格?

时间:2018-10-16 17:05:32

标签: sql oracle

尝试过:

INSERT INTO Airplanes 
VALUES (1, 'Boeing 720-020', 'New York', TO_DATE('17:30', 'HH24:MI'), 219);

但是运行它之后,在表中我有10/01/2018而不是17:30

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

Oracle中的

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数据类型,以便您可以利用内置的日期/时间功能,例如轻松地以特定格式显示时间。