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

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

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 не имеет типа данных только для времени; а тип данных даты всегда имеет компоненты даты и времени. Если вы сделаете select to_char(depature_time, 'YYYY-MM-DD HH24:MI:SS') from flights_info, вы увидите, что время есть. Если вы не укажете элементы даты, то по умолчанию они будут равны первому дню текущего месяца. Почему вам нужен отдельный столбец flight_date, а не полная дата и время начала и окончания? Помимо всего прочего, что облегчило бы работу с рейсами, вылетающими в полночь.

Alex Poole 15.05.2022 20:51

Привет, Алекс Пул, и спасибо за ответ, мне нужно отделить дату рейса от времени, чтобы у меня был запрос о рейсах за последние 4 часа ... и т. д., и я не знаю, как написать его с функцией to_char

Simo51 15.05.2022 21:00

Именно для такого запроса вы должны хранить дату и время вместе. Что, если вы хотите узнать данные за последние 4 часа в 2 часа ночи? To_char для форматирования даты для отображения

Andrew Sayer 15.05.2022 21:11

спасибо Андрей за разъяснение, думаю удалю столбец Flight_date, но как мне отображать только время в запросе, я не хочу выбирать дату,

Simo51 15.05.2022 21:18

Вы можете отображать только время в запросе, используя TO_CHAR(flight_date,'hh:mi')

Ankit Bajpai 15.05.2022 21:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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).

спасибо всем за ответы, я нашел правильное решение для моего случая с вашими ответами. спасибо за всех вас еще раз

Simo51 15.05.2022 21:49

Другие вопросы по теме