У меня есть вопрос о некоторых внутренних функциях для типов данных 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;
вернет тип данных NUMBER.
Но теперь, если вы это сделаете:
SELECT (SYSDATE - start_date) DAY(5) TO SECOND from test;
вы получаете тип данных INTERVAL. Другими словами, Oracle может преобразовать NUMBER из вычитания DATE в тип INTERVAL.
Итак, теперь я решил, что могу попробовать ввести тип данных NUMBER непосредственно в скобках (вместо того, чтобы делать "SYSDATE - start_date", что приводит к НОМЕР в любом случае):
SELECT (1242.12423) DAY(5) TO SECOND from test;
Но это приводит к ошибке:
ORA-30083: syntax error was found in interval value expression
Итак, мой вопрос: что здесь происходит? Кажется, что вычитание дат должно привести к NUMBER (как показано в инструкции SELECT # 1), которая НЕ МОЖЕТ быть автоматически перенесена в тип INTERVAL (как показано в инструкции SELECT № 3). Но Oracle, похоже, может это сделать как-то, если вы используете выражение вычитания DATE вместо того, чтобы вводить необработанный NUMBER (оператор SELECT # 2).
Спасибо