Вставить значение времени в оракул

Я создаю такую ​​таблицу

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 году.


26
1

Ответ:

Решено

Тип данных 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).