在oracle中插入一个时间值
insert a time value in oracle
我创建了一个这样的table
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');
但我不明白为什么我得到的是日期数据而不是时间。
输出
outputs
我不确定哪里出了问题
A DATE
数据类型是二进制数据类型,由 7 个字节组成,分别表示:世纪、year-of-century、月、日、小时、分钟和秒。它 ALWAYS 具有所有这些组件,即使您只设置其中一些组件,其他组件也会设置默认值。
- 当前年月。
- 一个月的第一天。
- 零小时、分钟和秒。
所以如果你使用:
SELECT to_date('8:00','hh:mi') FROM DUAL;
然后您将得到当前月份和年份的第一天的日期,上午 8 小时零分秒。
I don't why I got date data instead of time.
因为您用来显示 DATE
值的客户端应用程序设置为仅显示 DATE
的日期部分而不显示时间部分。
对于 SQL*Plus 和 SQL Developer,默认格式由 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'
);
然而,虽然这看起来是个好主意,但您可能确实希望使用日期和时间,以便当航班跨越 two-or-more 天时,您可以记录到达和离开的日期和时间(并且您不需要 flight_date
列,因为它将存储在 arrival_time
和 departure_time
列中。
我创建了一个这样的table
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');
但我不明白为什么我得到的是日期数据而不是时间。
输出 outputs
我不确定哪里出了问题
A DATE
数据类型是二进制数据类型,由 7 个字节组成,分别表示:世纪、year-of-century、月、日、小时、分钟和秒。它 ALWAYS 具有所有这些组件,即使您只设置其中一些组件,其他组件也会设置默认值。
- 当前年月。
- 一个月的第一天。
- 零小时、分钟和秒。
所以如果你使用:
SELECT to_date('8:00','hh:mi') FROM DUAL;
然后您将得到当前月份和年份的第一天的日期,上午 8 小时零分秒。
I don't why I got date data instead of time.
因为您用来显示 DATE
值的客户端应用程序设置为仅显示 DATE
的日期部分而不显示时间部分。
对于 SQL*Plus 和 SQL Developer,默认格式由 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'
);
然而,虽然这看起来是个好主意,但您可能确实希望使用日期和时间,以便当航班跨越 two-or-more 天时,您可以记录到达和离开的日期和时间(并且您不需要 flight_date
列,因为它将存储在 arrival_time
和 departure_time
列中。