Вычитание дат в Oracle - числовой или интервальный тип данных?

У меня есть вопрос о некоторых внутренних механизмах работы с типами данных 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).

Спасибо

21
задан BYS2 17 February 2012 в 04:32
поделиться