Subtrahieren von Daten in Oracle - Number oder Interval Datatype?

Ich habe eine Frage über einige der internen Abläufe für die Oracle-DATUM und INTERVALL-Datentypen. Nach der Oracle 11.2 SQL-Referenzwenn Sie subtrahieren 2 DATUM datatypes, wird das Ergebnis ein ZAHL-Datentyp.

Auf oberflächliche Prüfung, dies scheint wahr zu sein:

CREATE TABLE test (start_date DATE);
INSERT INTO test (start_date) VALUES (date'2004-08-08');
SELECT (SYSDATE - start_date) from test;

wird eine ZAHL zurückgeben Datentyp.

Aber jetzt, wenn Sie tun:

SELECT (SYSDATE - start_date) DAY(5) TO SECOND from test;

erhalten Sie eine INTERVAL-Datentyp. In anderen Worten, Oracle können, konvertieren Sie die ZAHL aus dem DATUM Subtraktion in einem INTERVALL geben.

So, jetzt dachte ich, ich könnte versuchen Sie in ein ZAHL-Datentyp, der direkt in die Klammern (anstatt das zu tun 'DATEPART - start_date', die Ergebnisse in eine REIHE sowieso):

SELECT (1242.12423) DAY(5) TO SECOND from test;

Aber diese Ergebnisse in der Fehlermeldung:

ORA-30083: syntax error was found in interval value expression

Also meine Frage ist: was ist hier Los? Es scheint, wie die Subtraktion von Datumsangaben sollten führen zu einer REIHE (wie gezeigt in der SELECT-Anweisung #1), die NICHT automatisch umgewandelt, INTERVALL-Typ (wie gezeigt in der SELECT-Anweisung #3). Aber Oracle scheint in der Lage zu tun, irgendwie, wenn Sie das DATUM der Subtraktion Ausdruck anstatt in eine raw-REIHE (SELECT-Anweisung #2).

Dank

InformationsquelleAutor der Frage BYS2 | 2012-02-17

Schreibe einen Kommentar