Я создаю такую таблицу
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');
но я не понимаю, почему я получил данные о дате вместо времени.
Выход выходы
я не уверен, что не так
Привет, Алекс Пул, и спасибо за ответ, мне нужно отделить дату рейса от времени, чтобы у меня был запрос о рейсах за последние 4 часа ... и т. д., и я не знаю, как написать его с функцией to_char
Именно для такого запроса вы должны хранить дату и время вместе. Что, если вы хотите узнать данные за последние 4 часа в 2 часа ночи? To_char для форматирования даты для отображения
спасибо Андрей за разъяснение, думаю удалю столбец Flight_date, но как мне отображать только время в запросе, я не хочу выбирать дату,
Вы можете отображать только время в запросе, используя TO_CHAR(flight_date,'hh:mi')





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