Die nächste Tabelle fasst die Typen von Rechenoperationen zusammen, die in einem Datums-/Zeitausdruck gültig sind. Dabei ist zu beachten, dass eine TIME-Variable nicht in einem arithmetischen Ausdruck verwendet werden kann. Eine Erläuterung der Formatsymbole finden Sie in "Formatkennungen für Datum, Zeit und Zeitmarke".
| Typ von Operand 1 | Operator | Typ von Operand 2 | Typ des Ergebnisses | Kommentare |
|---|---|---|---|---|
| DATE | - | DATE | INT | INT ist eine Anzahl Tage. |
| DATE | +/- | NUMBER | DATE | NUMBER kann eine Variable, ein Literal oder ein numerischer Ausdruck sein und es wird angenommen, dass es sich um eine Anzahl Tage handelt. |
| NUMBER | + | DATE | DATE | NUMBER kann eine Variable, ein Literal oder ein numerischer Ausdruck sein und es wird angenommen, dass es sich um eine Anzahl Tage handelt. |
| TIMESTAMP | - | TIMESTAMP | INTERVAL | Siehe "INTERVAL-Variablen verwenden" weiter unten. |
| DATE | - | TIMESTAMP | INTERVAL | Siehe "INTERVAL-Variablen verwenden" weiter unten. |
| TIMESTAMP | - | DATE | INTERVAL | Siehe "INTERVAL-Variablen verwenden" weiter unten. |
| TIMESTAMP | +/- | INTERVAL | TIMESTAMP | |
| INTERVAL | + | TIMESTAMP | TIMESTAMP | |
| DATE | +/- | INTERVAL | TIMESTAMP | |
| INTERVAL | + | DATE | TIMESTAMP | |
| INTERVAL | +/- | INTERVAL | INTERVAL | INTERVAL-Werte müssen denselben Bereich abdecken (d. h. Monate oder Sekunden). |
| INTERVAL | *// | NUMBER | INTERVAL | Beispielsweise können Sie ein Intervall (INTERVAL) von drei Jahren und drei Monaten durch zwei teilen. Das Ergebnis wird auf ein Jahr und sieben Monate gekürzt. |
Das schwierige Konzept ist hier der Typ INTERVAL. INTERVAL kommt nur zum Einsatz, wenn Ausdrücke entweder TIMESTAMP oder INTERVAL als einen der Operanden voraussetzen. Es gibt zwei Versionen des INTERVAL-Typs. Der eine speichert Monatsintervalle (Intervalle, die größer als ein Monat sind), der andere speichert Sekundenintervalle (Intervalle, die kleiner als ein Monat sind). Sie müssen ein Formatmuster angeben, wenn Sie eine INTERVAL-Variable definieren, und dieses Format muss EGL mitteilen, ob der INTERVAL-Wert ein Monats- oder Sekundenbereich ist.
diff01 INTERVAL("yyyy");
diff02 INTERVAL("MM");
diff03 INTERVAL("yyyyMM");
diff04 INTERVAL ("ddhhmmssffff");
diff05 INTERVAL ("hhmmss");
diff06 INTERVAL ("ddhhmm");
diff07 INTERVAL ("ss");
diff08 INTERVAL ("yyyyMMdd"); // unzulässig
diff09 INTERVAL ("MMddhhmmss"); // zulässig
//Monatsbereichsintervall
diff01 INTERVAL ("yyyyMM");
t1 TIMESTAMP ("yyyyMM") = "200504";
t2 TIMESTAMP ("yyyyMM") = "200604";
diff01 = t2 - t1;
// diff01 ist "+000100" (1 Jahr)
// Sekundenbereichsintervall
diff02 INTERVAL ("ddhhmmss");
t3 TIMESTAMP ("yyyyMMddhhmm") = "200604201027";
t4 TIMESTAMP ("yyyyMMddhhmm") = "200604201555";
diff02 = t4 - t3;
// diff02 ist "+00052800" (5 Stunden, 28 Minuten)
| Plattform | Problem |
|---|---|
| JavaScript-Generierung | Die folgenden Typen werden unterstützt: ANY, BIGINT,
BIN (nur, wenn keine Dezimalstellen vorhanden sind), Boolean, DataItem,
DATE, DECIMAL, Delegate, Dictionary, FLOAT, INT, NUM, NUMBER, SMALLFLOAT,
SMALLINT, STRING (nur, wenn keine Größenbegrenzung besteht) , TIME,
TIMESTAMP, NUM, MONEY, Serviceabschnitte, Schnittstellenabschnitte, externe Typen
(Stereotyp JavaScript), Gruppen
von unterstützten Typen und nicht strukturierte Abschnitte des Typs Basic, Exception und
SQL Record. Die folgenden Typen werden nicht unterstützt: ArrayDictionary, BIN (mit Dezimalstellen), BLOB, CHAR, CLOB, DBCHAR, HEX, INTERVAL, MBCHAR, NUMC, STRING (mit einer Größenbegrenzung), PACF, UNICODE und strukturierte Datensatzabschnitte. |