Я создаю такую таблицу
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 и прибытия_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');
но я не понимаю, почему я получил данные о дате вместо времени.
Выход выходы
я не уверен, что не так
🤔 А знаете ли вы, что...
СУБД Oracle была первой в мире реляционной базой данных, выпущенной в 1979 году.
Тип данных DATE
— это двоичный тип данных, состоящий из 7 байтов, представляющих: век, год века, месяц, день, час, минуту и секунду. Он ВСЕГДА имеет все эти компоненты, даже если вы устанавливаете только некоторые из этих компонентов, тогда для других будут установлены значения по умолчанию.
Итак, если вы используете:
SELECT to_date('8:00','hh:mi') FROM DUAL;
Затем вы получите дату, которая является 1-м днем текущего месяца и года с 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'
);
Однако, хотя это может показаться хорошей идеей, вы, вероятно, захотите использовать даты и время, чтобы, когда рейс длится два или более дней, вы могли записать дату и время прибытия и отправления (и вам не понадобится flight_date
, так как он будет храниться в столбцах arrival_time
и departure_time
).