Я думаю, что вам лучше хранить целую дату - год, месяц, день и время - тогда вы можете просто использовать TO_CHAR()
или EXTRACT()
, чтобы получить нужные вам части даты. Чтобы сохранить пятницу в столбце DATE
, вы можете сделать следующее:
INSERT INTO sala_materia
( sala_id, materia_id, horario )
VALUES
( 1, 'PT', NEXT_DAY(SYSDATE, 'FRIDAY') );
Это также даст текущее время суток; чтобы использовать произвольное время, вы можете усечь результаты функции NEXT_DAY
, а затем использовать интервалы или стандартную арифметику даты Oracle:
INSERT INTO sala_materia
( sala_id, materia_id, horario )
VALUES
( 1, 'PT', TRUNC( NEXT_DAY(SYSDATE, 'FRIDAY') ) + INTERVAL '15' HOUR );
или
INSERT INTO sala_materia
( sala_id, materia_id, horario )
VALUES
( 1, 'PT', TRUNC( NEXT_DAY(SYSDATE, 'FRIDAY') ) + 15/24 );
Интервалы могут работать немного лучше, если вам нужно быть более детальным (то есть, минуты и секунды).
Причина, по которой я рекомендую этот порядок действий вместо простого сохранения дня недели и времени в столбце VARCHAR2
, заключается в том, что вы можете использовать TO_CHAR()
или EXTRACT()
при отображении даты, используя части даты в сравнениях и т. д. - вы даже можете создать функциональные индексы или виртуальные столбцы на основе результатов этих функций, примененных к столбцу horario
:
CREATE INDEX mydayofweek ON sala_materia ( TO_CHAR(horario, 'DAY') );