von Bruce Dales und Gary Guthrie
Oft werden Berichte benötigt, die auf Daten aus dem vergangenen Monat basieren. Es gibt eine einfache Möglichkeit, die erforderlichen Informationen mit Query aus den betroffenen Dateien zu entnehmen. Zuerst wollen wir uns ansehen, wie sich die in einer Transaktionsdatei enthaltenen Daten des vergangenen Monats mit Hilfe des Transaktionsdatums (Feld TranDate) extrahieren lassen.
Hierzu nutzen wir die datumsbezogenen Funktionen der Query Ergebnisfelder, um die Beginn- und Enddaten des vergangenen Monats abzuleiten. Folgendes ist in der Query/400 Ergebnisfeldanzeige anzugeben:
Field Expression MONTHEND Current(Date) - Day(Current(Date)) Days MONTHBEGIN MontEnd - Day(MonthEnd) Days + 1 DayDie Funktion Current stellt das aktuelle Datum, die Zeit, den Zeitstempel oder die Zeitzone des Systems zur Verfügung. Die Funktion Date isoliert das Datum aus diesem Wert. Durch die Formulierung Current(Date) wird als Ergebnis das aktuelle Datum in ein Datumsfeld ausgegeben. Die Funktion Day liefert den numerischen Wert des Tages aus einem Datum oder einem Zeitstempel. In unserem Beispiel ist das Ergebnis der aus dem heutigen Datum isolierte Tag.
Die Funktion Days liefert den numerischen Wert eines Datums, eines Zeitstempels oder einer Zeichenkette, die ein Datum repräsentiert. Das Ergebnisfeld MonthEnd resultiert aus dem heutigen Datum abzüglich der Anzahl von Tagen, die dem aus dem heutigen Datum entnommenen Tag entspricht. Wäre das heutige Datum beispielsweise der 04.07.2002, wäre das zu ermittelnde Monatsende der 04.07.2002 abzüglich vier Tage, somit der 30.06.2002. Auf ähnliche Weise werden die Funktionen Day und Days eingesetzt, um das Datum des Monatsbeginns (MonthBegin) zu ermitteln.
Da nun der gewünschte Datumsbereich ermittelt ist, können die ermittelten Werte zur Selektion von Sätzen verwendet werden. Wie wir gleich sehen werden, kann es – abhängig von den Attributen des Feldes TranDate – möglicherweise erforderlich werden, zusätzliche Ergebnisfelder zu definieren. Ist TranDate ein Native Datumsfeld, werden keine weiteren Ergebnisfelder benötigt. In diesem Fall müssen in der Query-Satzauswahlanzeige nur die in Abbildung A angegebenen Kriterien eingetragen werden.
Ist TranDate ein 8-Byte numerisches Feld ohne Dezimalstellen im Format YYYYMMDD, werden die nachfolgend aufgeführten Ergebnisfelder benötigt. Folgendes ist in der Query/400 Ergebnisfeldanzeige anzugeben:
Field Expression CHARDATE1 Digits(TranDate) CHARDATE2 SubStr(CharDate1,1,4) || '-' || SubStr(CharDate1,5,2) || '-' || SubStr(CharDate1,7,2) ISODATE Date(CharDate2)
Die Funktion Digits liefert eine Zahl in Form einer Zeichenkette, auf die anschließend Substring und Concatenation Funktionen angewendet werden können. Diese Substring und Concatenation Funktionen sind erforderlich, um ein Zeichenfeld zu erstellen, das dem ISO Datumsformat YYYY-MM-DD entspricht. Genau dieses geschieht in der Definition für das Feld CharDate2 in dem obigen Beispiel.
Als nächstes wird die Funktion Date verwendet, um aus dem Zeichen-Datumsfeld ein Native Datums Feld (ISODate) zu erstellen. Über die drei Ergebnisfelder (Chardate1, Chardate2 und ISODate) wird das numerische Feld TranDate in das Native Feld ISODate konvertiert, welches wiederum anschließend in der Satzauswahlanzeige wie in Abbildung B dargestellt verwendet werden kann.
Wurde das Feld TranDate als 8-Byte Zeichenfeld im Format YYYYMMDD gespeichert, werden ebenfalls zusätzliche Ergebnisfelder erforderlich. In der Query/400 Ergebnisfeldanzeige ist Folgendes anzugeben:
Field Expression CHARDATE2 SubStr(TranDate,1,4) || '-' || SubStr(TranDate,5,2) || '-' || SubStr(TranDate,7,2) ISODATE Date(CharDate2)
Hierbei fällt auf, dass diese Ergebnisfelddefinitionen denjenigen ähneln, die anzuwenden sind, wenn das Feld TranDate numerisch ist. Wie aus dem Beispiel ersichtlich, werden auch dieselben Satzauswahlkriterien verwandt wie in Abbildung B.
![Künstler Burgy Zapp [http://burgyzapp.de]](http://newsolutions.de/it/wp-content/uploads//pa1_121-2154_IMG_Z_nf_o_Negativ-300x400.jpg)


