在oracle中插入一个时间值



我创建了一个类似的表

CREATE TABLE flights_info 
( flight_id number(10) NOT NULL,
Train_no number(10) NOT NULL,
station varchar2(50) NOT NULL,
depature_time date NOT NULL,
arrival_time date NOT NULL,
seats_number number(10) NOT NULL, 
seats_reserved number(10) NOT NULL, 
flight_date date NOT NULL,
CONSTRAINT flight_id PRIMARY KEY (flight_id )
);

文件depature_time和arrival_time应该表示时间值所以我试着用这个脚本插入

INSERT INTO flights_info (flight_id,Train_no,station,depature_time,arrival_time,seats_number,seats_reserved,flight_date) VALUES
(1,1,'Station01', to_date('8:00','hh:mi'),to_date('10:00','hh:mi'),30,10, date '2022-05-14');

但我不明白为什么我得到的是日期数据而不是时间。

输出输出

我不确定出了什么问题

DATE数据类型是一种二进制数据类型,由7个字节组成,表示:世纪、世纪年、月、日、小时、分钟和秒。它总是包含所有这些组件,即使您只设置了其中的一些组件,其他组件也将设置默认值。

  • 当前年份和月份
  • 本月的第一天
  • 零小时零分零秒

因此,如果您使用:

SELECT to_date('8:00','hh:mi') FROM DUAL;

然后,您将获得当前月份和年份的第一天,上午8小时,0分零秒。

我不知道为什么我得到的是日期数据而不是时间。

因为用于显示DATE值的客户端应用程序设置为仅显示DATE的日期组件,而不显示时间组件。

对于SQL*Plus和SQLDeveloper,默认格式由NLS_DATE_FORMAT会话参数设置,您可以使用进行更改

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

对于其他客户端应用程序,您需要查看它们的首选项(或文档),以了解默认日期格式的设置方式。

如果只想显示时间分量,则使用:

SELECT TO_CHAR(arrival_time, 'HH24:MI:SS') AS arrival_time
FROM   flight_info;

注意:HHHH12格式型号适用于12小时时钟。您可能想要HH24作为24小时时钟


如果要存储不带日期的时间,请使用INTERVAL DAY(0) TO SECOND(0)数据类型。

CREATE TABLE flights_info(
flight_id      number(10) NOT NULL,
Train_no       number(10) NOT NULL,
station        varchar2(50) NOT NULL,
depature_time  INTERVAL DAY(0) TO SECOND(0) NOT NULL,
arrival_time   INTERVAL DAY(0) TO SECOND(0) NOT NULL,
seats_number   number(10) NOT NULL, 
seats_reserved number(10) NOT NULL, 
flight_date    date NOT NULL,
CONSTRAINT flight_id PRIMARY KEY (flight_id )
);

然后:

INSERT INTO flights_info (
flight_id,
Train_no,
station,
depature_time,
arrival_time,
seats_number,
seats_reserved,
flight_date
) VALUES (
1,
1,
'Station01',
INTERVAL '08:00:00' HOUR TO SECOND,
INTERVAL '10:00:00' HOUR TO SECOND,
30,
10,
date '2022-05-14'
);

然而,虽然这看起来是个好主意,但您可能确实希望使用日期和时间,这样当航班跨越两天或两天以上时,您就可以记录到达和离开的日期和时间(您不需要flight_date列,因为它将存储在arrival_timedeparture_time列中)。

相关内容

  • 没有找到相关文章