In diesem Abschnitt: Referenz: |
Es wurden mehrere neue Datentypen für den SQL Translator definiert, um Datum-Zeit-Felder im WHERE-Prädikat oder der Feldliste einer SELECT-Anweisung zu unterstützen.
Es können zusätzlich Zeit- oder Zeitstempelspalten in relationalen Datenquellen oder FOCUS-Datenquellen definiert werden und der Translator kann auf sie zugreifen. Es können Werte mit INSERT- und UPDATE-Anweisungen eingegeben werden und in SELECT-Anweisungen angezeigt werden.
Zeit- oder Zeitstempel-Datenelemente (Spalten oder Literale) können in Bedingungen verglichen werden. Zeitwerte oder Zeitstempelwerte können addiert werden oder voneinander subtrahiert werden, wobei das Ergebnis die Differenz in Sekunden ist. Formeln wie T + 2 HOURS oder TS + 5 YEARS sind erlaubt. Diese Formeln werden in Abfragen für die Datum-Zeit-Funktionen übersetzt, wie es beschrieben wird im Handbuch Funktionen verwenden .
Alle Datumsformate für tatsächliche und virtuelle Felder in der Masterdatei werden in das Format YYYYMMDD umgewandelt. Wenn Sie ein Format angeben, in dem eine Komponente fehlt, gibt der SQL Translator einen Defaultwert für die fehlende Komponente an. Verwenden Sie ein virtuelles Feld mit einem alphanumerischen Format, um einen Teil eines Datums wie beispielsweise den Monat anzugeben.
Im folgenden Diagramm steht fff für die Sekunde bis zu drei Dezimalstellen (Millisekunden) und ffffff für die Sekunde bis zu sechs Dezimalstellen (Mikrosekunden).
Die folgenden Formate sind als Eingabe in den Translator erlaubt:
Format |
USAGE-Attribut in der Masterdatei |
Datumskomponenten |
---|---|---|
Datum |
YYMD |
YYYY-MM-DD |
Stunde |
HH |
HH |
Stunde bis Minute |
HHI |
HH.MM |
Stunde bis Sekunde |
HHIS |
HH.MM.SS |
Stunde bis Millisekunde |
HHISs |
HH.MM.SS.fff |
Stunde bis Mikrosekunde |
HHISsm |
HH.MM.SS.ffffff |
Jahr bis Stunde |
HYYMDH |
YYYY-MM-DD HH |
Jahr bis Minute |
HYYMDI |
YYYY-MM-DD HH.MM |
Jahr bis Sekunde |
HYYMDS |
YYYY-MM-DD HH.MM.SS |
Jahr bis Millisekunde |
HYYMDs |
YYYY-MM-DD HH.MM.SS.fff |
Jahr bis Mikrosekunde |
HYYMDm |
YYYY-MM-DD HH.MM.SS.ffffff |
Hinweis:
Vorgehensweise: |
Der SQL Translator unterstützt mehrere Funktionen, die Komponenten aus Datum-Zeit-Werten zurückgeben. Verwenden Sie die EXTRACT-Anweisung, um Komponenten zu extrahieren.
Verwenden Sie die Funktion TRIM, um vorangestellte oder/oder nachgestellte Muster aus Datum-, Zeit- und Zeitstempelwerten zu entfernen. Im Handbuch Funktionen verwenden .
Die folgenden Funktionen geben Datum-Zeit-Komponenten als ganzzahlige Werte zurück. Nehmen wir an, dass x ein Datum-Zeitwert ist:
Funktion |
Rückgabewert |
---|---|
YEAR(x) |
Jahr |
MONTH(x) |
Monatszahl |
DAY(x) |
Tageszahl |
HOUR(x) |
Stunde |
MINUTE(x) |
Minute |
SECOND(x) |
Sekunde |
MILLISECOND(x) |
Millisekunde |
MICROSECOND(x) |
Mikrosekunde |
Verwenden der Zeitstempelspalte TS, deren Wert '1999-11-23 07:32:16.123456' ist:
YEAR(TS) = 1999 MONTH(TS) = 11 DAY(TS) = 23 HOUR(TS) = 7 MINUTE(TS) = 32 SECOND(TS) = 16 MILLISECOND(TS) = 123 MICROSECOND(TS) = 123456
Nehmen wir an, dass eine FOCUS-Datenquelle namens VIDEOTR2 ein Datum-Zeit-Feld namens TRANSDATE enthält.
SQL SELECT TRANSDATE, YEAR(TRANSDATE), MONTH(TRANSDATE), MINUTE(TRANSDATE) FROM VIDEOTR2; FILE VIDSQL END
Der SQL Translator erzeugt die folgenden virtuellen Felder für Funktionen, gefolgt von einer TABLE-Anfrage, um die Ausgabe anzuzeigen:
SET COUNTWIDTH=ON -SET SQLERRNUM = 0; DEFINE FILE VIDEOTR2 TEMP SQLDEF01/I4 MISSING ON NEEDS ALL = HPART(TRANSDATE,'YEAR','I4'); SQLDEF02/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MONTH','I2'); SQLDEF03/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MINUTE','I2'); END TABLEF FILE VIDEOTR2 PRINT TRANSDATE SQLDEF01 AS 'SQLDEF01' SQLDEF02 AS 'SQLDEF02' SQLDEF03 AS 'SQLDEF03' ON TABLE SET CARTESIAN ON ON TABLE SET ASNAMES ON ON TABLE SET HOLDLIST PRINTONLY END
Die Ausgabe ist:
TRANSDATE SQLDEF02 SQLDEF04 SQLDEF05 1999/06/20 04:14 1999 6 14 1991/06/27 02:45 1991 6 45 1996/06/21 01:16 1996 6 16 1991/06/21 07:11 1991 6 11 1991/06/20 05:15 1991 6 15 1999/06/26 12:34 1999 6 34 1919/06/26 05:45 1919 6 45 1991/06/21 01:10 1991 6 10 1991/06/19 07:18 1991 6 18 1991/06/19 04:11 1991 6 11 1998/10/03 02:41 1998 10 41 1991/06/25 01:19 1991 6 19 1986/02/05 03:30 1986 2 30 1991/06/24 04:43 1991 6 43 1991/06/24 02:08 1991 6 8 1999/10/06 02:51 1999 10 51 1991/06/25 01:17 1991 6 17
Verwenden Sie die folgende ANSI-Standardfunktion, um Datum-Zeit-Komponenten als ganzzahlige Werte zu extrahieren:
EXTRACT(component FROM value)
Hierbei gilt:
Ist eine der folgenden: YEAR, MONTH, QUARTER, DAY, WEEKDAY, HOUR, MINUTE, SECOND, MILLISECOND oder MICROSECOND.
Ist ein Datum-Zeit-, DATE-, TIME- oder TIMESTAMP-Feld, -Konstante oder -Formel.
Das Folgende ist z. B. äquivalent:
EXTRACT(YEAR FROM TS) YEAR(TS)
SELECT D. EXTRACT(YEAR FROM D), EXTRACT(MONTH FROM D), EXTRACT(DAY FROM D) FROM T
Diese Anfrage erzeugt Zeilen, die der Folgenden ähneln:
1999-01-01 1999 1 1 2000-03-03 2000 3 3
WebFOCUS |