У меня есть вопрос о некоторых внутренних механизмах работы с типами данных Oracle DATE и INTERVAL. Согласно Oracle 11.2 SQL Reference , когда вы вычитаете 2 типа данных DATE, результатом будет тип данных NUMBER.
При беглом тестировании это оказалось правдой:
CREATE TABLE test (start_date DATE);
INSERT INTO test (start_date) VALUES (date'2004-08-08');
SELECT (SYSDATE - start_date) from test;
вернет тип данных ЧИСЛО.
Но теперь, если вы сделаете:
SELECT (SYSDATE - start_date) DAY(5) TO SECOND from test;
, вы получите тип данных INTERVAL. Другими словами, Oracle может преобразовать ЧИСЛО из вычитания ДАТЫ в тип ИНТЕРВАЛ.
Итак, теперь я решил, что могу попробовать ввести тип данных NUMBER прямо в скобки (вместо выполнения команды SYSDATE - start_date, которая в любом случае дает НОМЕР):
SELECT (1242.12423) DAY(5) TO SECOND from test;
Но это приводит к ошибке:
ORA-30083: syntax error was found in interval value expression
Итак у меня вопрос: что здесь происходит? Похоже, что вычитание дат должно привести к ЧИСЛУ (как показано в операторе SELECT # 1), которое НЕ МОЖЕТ быть автоматически преобразовано в тип INTERVAL (как показано в операторе SELECT # 3). Но Oracle, похоже, каким-то образом может это сделать, если вы используете выражение вычитания DATE вместо ввода необработанного NUMBER (оператор SELECT # 2).
Спасибо