我创建了一个类似的表
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;
注意:HH
或HH12
格式型号适用于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_time
和departure_time
列中)。