Как вставить в таблицу только час и минуту? - PullRequest
0 голосов
/ 16 октября 2018

Пробовал это:

INSERT INTO Airplanes 
VALUES (1, 'Boeing 720-020', 'New York', TO_DATE('17:30', 'HH24:MI'), 219);

Но после запуска в таблице у меня есть 10/01/2018 вместо 17:30.

Я очень благодарен за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

DATE в Oracle - это тип данных datetime.Тип данных TIME отсутствует.Поэтому, если вы хотите сохранить только время, вам нужно использовать строку.

create table airplane (
  id number primary key
  , plane_type varchar2(32) not null
  , destination  varchar2(32) not null
  , flight_time varchar2(5) not null check (regexp_like(flight_time, '[0-9]{2}:[0-9]{2}'))
)
/

Ограничение проверки обеспечивает формат 99:99.Если хотите, вы можете сделать более строгое.


У меня есть некоторое сочувствие к @AlexPoole, что мы должны использовать столбец DATE для хранения времени, потому что это облегчает обеспечение того, чтобы только действительные времена былипоступил.Но затем мы должны ограничить часть даты, чтобы убедиться, что это всегда одна и та же волшебная дата, и мы всегда должны применять маску формата всякий раз, когда мы запрашиваем таблицу, чтобы убедиться, что она отображает только время.Итак, мы что-то получаем, но мы также что-то теряем.

Есть и другие решения в стиле барокко.Вы можете определить flight_time как интервал:

 , flight_time interval day to second 

Тогда ваш оператор вставки будет

insert into airplane 
values (1, 'Boeing 720-020','New York',INTERVAL '0 17:30:0' DAY TO SECOND);

Вы все еще хотите проверить, что элемент DAY равен нулю.И я думаю, что запрашиваемый вывод все еще нуждается в форматировании.

Но я подозреваю, что мы начинаем чрезмерно разрабатывать то, что кажется заданием курса.Так что придерживайтесь строки, если вам не нужно что-то лучшее,

0 голосов
/ 17 октября 2018

Вы можете сохранить время как то, что вы показали:

TO_DATE('17:30', 'HH24:MI')

В вашей таблице Airplanes есть столбец типа данных date (который на самом деле представляет собой дату и время как , заданныйAPC ), где вы пытались сохранить это время.Ваше время действительно сохранено, но оно поставляется с датой, которую вы не указали, и по умолчанию устанавливается на первый день текущего месяца.

Ваша единственная проблема заключается в том, что Oracle показал вам дату, когда вы select отредактировали ее,Итак, чтобы покончить с этим, просто используйте to_char(), чтобы отображать время только в определенном формате, например так:

select to_char(column_name,'HH24:MI') from Airplanes;

Если вы пойдете по этому пути, позвольте мне предложить сохранить такжедата того времени, чтобы в ваших записях не было бесполезных дат.Так, например, если вы сохраняете время полета, также сохраняйте дату полета в том же столбце, например:

TO_DATE('2018-10-17 17:30', 'YYYY-MM-DD HH24:MI')

Кроме того, используйте тип данных date, чтобы выможет использовать встроенные функции даты / времени, например, легко отображать время в определенном формате.

0 голосов
/ 16 октября 2018

Вы можете попробовать использовать функцию to_char.

Пример:

SELECT TO_CHAR(SYSDATE,'HH24:MI') FROM DUAL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...