Eine Datum-Zeit-Formel erstellen

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 .


Nach oben

x
Syntax: Die Reihenfolge von Datumskomponenten in einem Datum-Zeit-Feld angeben
SET DATEFORMAT = option

Hierbei gilt:

option
Kann eines der Folgenden sein: MDY, DMY, YMD oder MYD. MDY ist der Defaultwert für das Format Englisch (USA).

Ein Beispiel finden Sie unter Die Reihenfolge von Datumskomponenten für ein Datum-Zeit-Feld angeben.


Nach oben

x
Einen Datum-Zeit-Wert 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:

time_string
Darf keine Leerzeichen enthalten. Zeitkomponenten werden abgetrennt durch Doppelpunkte, und es kann auf sie AM, PM, am oder pm folgen. Beispiel:
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 auf die Sekunde ein Doppelpunkt folgt, steht der darauffolgende Wert für die Millisekunde. Mit dieser Schreibweise können Mikrosekunden oder Nanosekunden nicht ausgedrückt werden.
  • Ein Dezimaltrennzeichen im zweiten Wert gibt den Dezimalbruch einer Sekunde an. Eine Mikrosekunde kann dargestellt werden mit sechs Dezimalstellen. Eine Nanosekunde kann dargestellt werden mit neun Dezimalstellen.
date_string
Kann eines der drei folgenden Formate haben:
  • Das numerische Zeichenfolgenformat hat genau vier, sechs oder acht Stellen. Vierstellige Zeichenfolgen werden als ein Jahr betrachtet (Jahrhundert muss angegeben werden). Der Monat und der Tag sind eingestellt auf Januar 1. Sechs- und achtstellige Zeichenfolgen enthalten zwei oder vier Stellen für das Jahr, gefolgt von zwei für den Monat und dann zwei für den Tag. Da bei diesem Format die Komponentenreihenfolge festgelegt ist, wird die Einstellung DATEFORMAT, die beschrieben wird unter Die Reihenfolge von Datumskomponenten in einem Datum-Zeit-Feld angeben, ignoriert.

    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
  • Das Format Formatierte Zeichenfolge enthält einen ein- oder zweistelligen Tag, einen ein- oder zweistelligen Monat und ein zwei- oder vierstelliges Jahr, abgetrennt durch Leerzeichen, Schrägstriche, Bindestriche oder Punkte. Es müssen alle drei Teile vorhanden sein und der Einstellung DATEFORMAT folgen, die beschrieben wird unter Die Reihenfolge von Datumskomponenten in einem Datum-Zeit-Feld angeben. Wenn eines der drei Felder vier Stellen hat, wird es als das Jahr interpretiert, und die anderen zwei Felder müssen die Reihenfolge befolgen, die durch die Einstellung DATEFORMAT vorgegeben ist. Nachfolgend sehen Sie Beispiele für Datumskonstanten mit formatierter Zeichenfolge:
    1999/05/20
    5 20 1999
    99.05.20
    1999-05-20
  • Format Übersetzte Zeichenfolge enthält den vollständigen oder abgekürzten Monatsnamen. Das Jahr muss auch vorhanden sein, entweder vierstellig oder zweistellig. Wenn der Tag fehlt, wird der 1. angenommen. Wenn er vorhanden ist, kann er einstellig oder zweistellig sein. Wenn die Zeichenfolge sowohl ein zweistelliges Jahr als auch einen zweistelligen Tag enthält, müssen sie sich in der Reihenfolge befinden, die die Einstellung DATEFORMAT vorgibt. Beispiel:
    January 6 2000

Hinweis:



Beispiel: Datum-Zeit-Literale zuweisen

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);


Beispiel: Die Reihenfolge von Datumskomponenten für ein Datum-Zeit-Feld angeben

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


Beispiel: Datum-Zeit-Werte aus einer Transaktionsdatei lesen

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 ,$


Beispiel: Einen Datum-Zeit-Wert in einem COMPUTE-Befehl verwenden
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


Beispiel: Einen Datum-Zeit-Wert in WHERE-Kriterien verwenden

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


Beispiel: Einen Datum-Zeit-Wert in IF-Kriterien verwenden

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


Beispiel: Universale Datum-Zeit-Eingabewerte angeben

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.



x
Datum-Zeit-Werte manipulieren

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.



Beispiel: Auf fehlende Datum-Zeit-Werte testen

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


Beispiel: Einer Datum-Zeit-Spalte ein anderes Verwendungsformat zuweisen

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