In diesem Abschnitt: Vorgehensweise: |
Eine Datum-Zeit-Formel gibt Datum- und Zeitkomponenten zurück. Sie können diese Formeln erstellen mit einer Vielzahl von bereitgestellten Datum-Zeit-Funktionen. Genaueres über Datum-Zeit-Funktionen finden Sie im Handbuch Funktionen verwenden .
SET DATEFORMAT = option
Hierbei gilt:
Ein Beispiel finden Sie unter Die Reihenfolge von Datumskomponenten für ein Datum-Zeit-Feld angeben.
Ein externer Datum-Zeit-Wert ist eine Konstante in einem Zeichenformat aus einer der folgenden Quellen:
Eine Datum-Zeit-Konstante oder ein Datum-Zeit-Wert, wie er in einer Zeichendatei angezeigt wird, hat eines der folgenden Formate:
time_string [date_string] date_string [time_string]
Eine Datum-Zeit-Konstante in einer COMPUTE-, DEFINE- oder WHERE-Formel muss eines der folgenden Formate haben:
DT(time_string [date_string]) DT(date_string [time_string])
Eine Datum-Zeit-Konstante in einer IF-Formel hat eines der folgenden Formate:
'time_string [date_string]' 'date_string [time_string]'
Wenn der Wert keine Leerzeichen oder Sonderzeichen enthält, sind die einfachen Anführungszeichen nicht nötig. Beachten Sie, dass das DT-Präfix in IF-Kriterien nicht unterstützt wird.
Hierbei gilt:
14:30:20:99 (99 milliseconds) 14:30 14:30:20.99 (99/100 seconds) 14:30:20.999999 (999999 microseconds) 02:30:20:500pm
Beachten Sie, dass die Sekunde durch ein Dezimaltrennzeichen angezeigt werden kann, oder dass auf sie ein Doppelpunkt folgen kann:
Wenn ein Format für eine numerische Zeichenfolge gefunden wird, das länger als acht Stellen ist, wird dies als eine kombinierte Datum-Zeit-Zeichenfolge im Format Hn behandelt. Nachfolgend sehen Sie Beispiele für Datumskonstanten mit numerischer Zeichenfolge:
99 1999 19990201
1999/05/20 5 20 1999 99.05.20 1999-05-20
January 6 2000
Hinweis:
Das DT-Präfix kann in einer COMPUTE-, DEFINE- oder WHERE-Formel verwendet werden, um einem Datum-Zeit-Feld ein Datum-Zeit-Literal zuzuweisen. Beispiel:
DT2/HYYMDS = DT(20051226 05:45);
DT3/HYYMDS = DT(2005 DEC 26 05:45);
DT4/HYYMDS = DT(December 26 2005 05:45);
Die folgende Anfrage stellt DATEFORMAT auf MYD ein:
SET DATEFORMAT = MYD DEFINE FILE EMPLOYEE DTFLDYYMD/HYYMDI = DT(APR 04 05); END TABLE FILE EMPLOYEE PRINT CURR_SAL DTFLDYYMD END
Die Ausgabe zeigt, dass das natürliche Datumsliteral 'APR 04 05' interpretiert wird als 5. April 1904:
CURR_SAL DTFLDYYMD -------- --------- $11,000.00 1904/04/05 00:00 $13,200.00 1904/04/05 00:00 $18,480.00 1904/04/05 00:00 $9,500.00 1904/04/05 00:00 $29,700.00 1904/04/05 00:00 $26,862.00 1904/04/05 00:00 $21,120.00 1904/04/05 00:00 $18,480.00 1904/04/05 00:00 $21,780.00 1904/04/05 00:00 $16,100.00 1904/04/05 00:00 $9,000.00 1904/04/05 00:00 $27,062.00 1904/04/05 00:00
Die kommabegrenzte Transaktionsdatei DTTRANS hat ein ID-Feld und ein Datum-Zeit-Feld, das sowohl das Datum (acht Zeichen) als auch die Zeit (im Format Stunde:Minute:Sekunde) enthält:
01, 20000101 02:57:25,$ 02, 19991231 14:05:35,$
Da die Transaktionsdatei die Daten im Format numerische Zeichenfolge enthält, wird die Einstellung DATEFORMAT nicht verwendet, und Daten werden in der Reihenfolge YMD eingegeben.
Die folgende Transaktionsdatei ist auch gültig. Sie enthält formatierte Zeichenfolgendaten, die die Default-Einstellung DATEFORMAT einhalten (MDY):
01, 01/01/2000 02:57:25,$ 02, 12/31/1999 14:05:35,$
Die folgende Masterdatei beschreibt die FOCUS-Datenquelle namens DATETIME, welche diese Werte erhält:
FILE=DATETIME, SUFFIX=FOC ,$ SEGNAME=DATETIME, SEGTYPE=S0 ,$ FIELD=ID, ID, USAGE = I2 ,$ FIELD=DT1, DT1, USAGE=HYYMDS ,$
TABLE FILE EMPLOYEE PRINT LAST_NAME FIRST_NAME AND COMPUTE NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL); RAISETIME/HYYMDIA = DT(20000101 09:00AM); WHERE CURR_JOBCODE LIKE 'B%' END
Die Ausgabe ist:
LAST_NAME FIRST_NAME NEWSAL RAISETIME --------- ---------- ------ --------- SMITH MARY $14,520.00 2000/01/01 9:00AM JONES DIANE $20,328.00 2000/01/01 9:00AM ROMANS ANTHONY $23,232.00 2000/01/01 9:00AM MCCOY JOHN $20,328.00 2000/01/01 9:00AM BLACKWOOD ROSEMARIE $23,958.00 2000/01/01 9:00AM MCKNIGHT ROGER $17,710.00 2000/01/01 9:00AM
In einer WHERE-Klausel muss eine Datum-Zeit-Konstante das Format DT( ) verwenden:
TABLE FILE VIDEOTR2 PRINT CUSTID TRANSDATE WHERE TRANSDATE GT DT(2000/01/01 02:57:25) END
Die Ausgabe ist:
CUSTID TRANSDATE ------ --------- 1118 2000/06/26 05:45 1237 2000/02/05 03:30
In einer IF-Klausel muss eine Datum-Zeit-Konstante in einfache Anführungszeichen gesetzt werden, wenn sie Leerzeichen enthält:
TABLE FILE VIDEOTR2 PRINT CUSTID TRANSDATE IF TRANSDATE GT '2000/01/01 02:57:25' END
Hinweis: Das DT-Präfix für eine Datum-Zeit-Konstante wird in einer IF-Klausel nicht unterstützt.
Die Ausgabe ist:
CUSTID TRANSDATE ------ --------- 1118 2000/06/26 05:45 1237 2000/02/05 03:30
Mit den DTSTANDARD-Einstellungen STANDARD und STANDARDU können die folgenden Datum-Zeit-Werte als Eingabe gelesen werden:
Eingabewert | Beschreibung |
---|---|
14:30[:20,99] | Komma trennt Zeitkomponenten ab anstelle von Punkt |
14:30[:20.99]Z | Universalzeit |
15:30[:20,99]+01 15:30[:20,99]+0100 15:30[:20,99]+01:00 | Hiervon ist jede wie oberhalb in mitteleuropäischer Zeit |
09:30[:20.99]-05 | Identisch mit obigem in Eastern Normalzeit |
Beachten Sie, dass diese Werte intern identisch gespeichert werden mit der Einstellung STANDARDU. Mit der Einstellung STANDARD wird alles, was auf Z, + oder - folgt, ignoriert.
Die einzigen direkten Operationen, die mit Datum-Zeit-Variablen und Konstanten durchgeführt werden können, sind Vergleich mit einer logischen Formel und einfache Zuweisung in der Form A = B.
Berechnungen erlauben nur direkte Zuweisung in Datentypen: alpha zu alpha, numerisch zu numerisch, Datum zu Datum und Datum-Zeit zu Datum-Zeit. Alle anderen Operationen werden mit einem Set von Datum-Zeit-Funktionen durchgeführt.
Es können zwei Datum-Zeit-Werte immer verglichen werden, auch wenn ihre Längen nicht übereinstimmen.
Wenn ein Datum-Zeit-Feld fehlende Werte unterstützt, haben Felder, die den fehlenden Wert enthalten, einen größeren Wert als ein Datum-Zeit-Feld haben kann. Es wird daher, um fehlende Werte auszuschließen, wenn Sie einen GT- oder GE-Operator in einem Auswahltest verwenden, empfohlen, dass Sie dem Auswahltest das zusätzliche Einschränkungsfeld NE MISSING hinzufügen:
date_time_field {GT|GE} date_time_value AND date_time_field NE MISSING
Zuweisungen sind erlaubt zwischen Datum-Zeit-Formaten mit derselben Länge oder unterschiedlichen Längen. Wenn Sie einem 8-Byte-Datum-Zeit-Wert einen 10-Byte-Datum-Zeit-Wert zuweisen, werden die Mikrosekunden abgeschnitten (es findet keine Rundung statt). Wenn Sie einem langen Wert einen kurzen Wert zuweisen, werden die unteren drei Stellen der Mikrosekunden auf Null eingestellt.
Andere Vorgänge, wie arithmetisch, Verkettung, EDIT und LIKE mit Datum-Zeit-Operanden werden nicht unterstützt. Präfixoperatoren, die mit alphanumerischen Feldern funktionieren, werden unterstützt.
Betrachten wir die Masterdatei DATETIM2:
FILE=DATETIM2, SUFFIX=FOC ,$ SEGNAME=DATETIME, SEGTYPE=S0 ,$ FIELD=ID, ID, USAGE = I2 ,$ FIELD=DT1, DT1, USAGE=HYYMDS, MISSING=ON,$
Das Feld DT1 unterstützt fehlende Werte. Betrachten wir die folgende Anfrage:
TABLE FILE DATETIM2 PRINT ID DT1 END
Die sich ergebende Reportausgabe zeigt, dass in der Instanz mit ID=3 das Feld DT1 einen fehlenden Wert hat:
ID DT1 -- --- 1 2000/01/01 02:57:25 2 1999/12/31 00:00:00 3 .
Die folgende Anfrage wählt Werte von DT1 aus, die größer sind als 2000/01/01 00:00:00 und die nicht fehlen:
TABLE FILE DATETIM2 PRINT ID DT1 WHERE DT1 NE MISSING AND DT1 GT DT(2000/01/01 00:00:00); END
Der fehlende Wert wird in die Reportausgabe nicht aufgenommen:
ID DT1 -- --- 1 2000/01/01 02:57:25
Betrachten Sie die folgende Anfrage mit der Datenquelle VIDEOTR2:
TABLE FILE VIDEOTR2 PRINT CUSTID TRANSDATE AND COMPUTE DT2/HYYMDH = TRANSDATE; T1/HHIS = TRANSDATE; WHERE DATE EQ 2000 END
Die Ausgabe ist:
CUSTID TRANSDATE DT2 T1 ------ --------- --- -- 1118 2000/06/26 05:45 2000/06/26 05 05:45:00 1237 2000/02/05 03:30 2000/02/05 03 03:30:00
WebFOCUS |