In diesem Abschnitt: |
Sie können Datensätze für Ihren Report mit verschiedenen Tests auswählen, die mit den Operatoren, die in Für WHERE- und IF-Tests unterstützte Operatoren beschrieben sind, implementiert werden. Sie können testen auf:
Vorgehensweise: |
Verwenden Sie die Operatoren FROM ... TO und NOT-FROM ... TO, um zu bestimmen, ob sich Feldwerte innerhalb oder außerhalb eines gegebenen Bereichs befinden. Sie können entweder Werte oder Formeln verwenden, um die Unter- und Obergrenze anzugeben. Bereichstests können auch auf Sortiersteuerfelder angewendet werden. Der Bereichstest wird gleich nach der Sortierphrase angegeben.
Sie können auch testen, ob sich eine Formel innerhalb oder außerhalb der Begrenzungen befindet.
WHERE [TOTAL] {fieldname|expression} {FROM|IS-FROM} lower TO upper WHERE [TOTAL] fieldname NOT-FROM lower TO upper
Hierbei gilt:
Dies ist ein Beispiel eines Bereichstests, in dem Formeln als Begrenzungen verwendet werden:
WHERE SALES FROM (DEALER_COST * 1.4) TO (DEALER_COST * 2.0)
Im folgenden Beispiel sehen Sie einen Bereichstest, der Formeln als den Vergleichswert und die Begrenzungen verwendet:
WHERE SALES * 1.5 FROM (DEALER_COST * 1.4) TO (DEALER_COST * 2.0)
Im Anschluss wird gezeigt, wie Sie den Bereichstest NOT-FROM ... TO verwenden können, um nur die Datensätze anzuzeigen, die sich außerhalb des angegebenen Bereichs befinden. In diesem Beispiel sind das alle Angestellten, deren Gehälter nicht zwischen $12.000 und $22.000 liegen.
TABLE FILE EMPLOYEE PRINT CURR_SAL BY LAST_NAME WHERE CURR_SAL NOT-FROM 12000 TO 22000 END
Die Ausgabe ist:
LAST_NAME CURR_SAL --------- -------- BANNING $29,700.00 CROSS $27,062.00 GREENSPAN $9,000.00 IRVING $26,862.00 SMITH $9,500.00 STEVENS $11,000.00
Im folgenden Beispiel sehen Sie, wie Bereichstests durchgeführt werden, wenn ein Feld mit den Sortierphrasen BY oder ACROSS sortiert wird:
BY MONTH FROM 4 TO 8
oder
ACROSS MONTH FROM 6 TO 10
Vorgehensweise: |
Die Operatoren GE (größer oder gleich), LE (kleiner oder gleich), GT (größer als) und LT (kleiner als) können verwendet werden, um Bereiche anzugeben.
Mit GE ... LE können Sie Werte angeben, die in den Bereichsgrenzen des Tests liegen.
Mit LT ... GT können Sie Werte angeben, die außerhalb der Bereichsgrenzen des Tests liegen.
Verwenden Sie, um Werte auszuwählen, die in einem Bereich liegen
WHERE fieldname GE lower AND fieldname LE upper
Verwenden Sie, um Datensätze zu finden, deren Werte nicht in einem angebebenen Bereich liegen
WHERE fieldname LT lower OR fieldname GT upper
Hierbei gilt:
Diese WHERE-Phrase wählt Datensätze aus, deren UNIT-Wert zwischen 10.000 und 14.000 liegt.
WHERE UNITS GE 10000 AND UNITS LE 14000
Dieses Beispiel entspricht:
WHERE UNITS GE 10000 WHERE UNITS LE 14000
Im Anschluss wird gezeigt, wie Sie mit den Operatoren LT und GT Werte auswählen können, die außerhalb eines Bereichs liegen. In diesem Beispiel sind nur die Angestellten in der Ausgabe enthalten, deren Gehälter weniger als $12.000 oder mehr als $22.000 betragen.
TABLE FILE EMPLOYEE PRINT CURR_SAL BY LAST_NAME WHERE CURR_SAL LT 12000 OR CURR_SAL GT 22000 END
Die Ausgabe ist:
LAST_NAME CURR_SAL --------- -------- BANNING $29,700.00 CROSS $27,062.00 GREENSPAN $9,000.00 IRVING $26,862.00 SMITH $9,500.00 STEVENS $11,000.00
Vorgehensweise: |
Wenn Sie Reportanfragen erstellen, möchten Sie ggf. auf fehlende Daten testen. Dieser Testtyp ist sehr hilfreich, wenn bei Feldern, die fehlende Daten haben, auch das MISSING-Attribute in der Masterdatei auf ON gestellt ist. Weitere Informationen über fehlende Daten finden Sie unter Datensätze mit fehlenden Feldwerten verarbeiten und im Handbuch Daten mit der WebFOCUS-Sprache beschreiben .
{WHERE|IF} fieldname {EQ|IS} MISSING
Hierbei gilt:
Die Operatoren CONTAINS und OMITS testen, wenn Sie mit WHERE verwendet werden, alphanumerische Felder, und wenn Sie mit IF verwendet werden sowohl alphanumerische Felder als auch Textfelder. Bei CONTAINS ist der Test bestanden, wenn die Zeichen im gegebenen Literal oder den gegebenen Literalen irgendwo in den Zeichen des Feldwertes vorhanden sind.
OMITS ist das Gegenteil von CONTAINS: Der Test ist nicht bestanden, wenn die Zeichen im gegebenen Literal oder den gegebenen Literalen irgendwo in den Zeichen des Feldwertes vorhanden sind.
CONTAINS- und OMITS-Tests sind hilfreich, wenn Sie nicht genau wissen, wie ein Wert genau geschrieben wird. Solange Sie wissen, dass in dem Wert eine bestimmte Zeichenfolge vorhanden ist, können Sie die gewünschten Daten abrufen.
Die folgenden Beispiele zeigen verschiedene Möglichkeiten auf, wie CONTAINS- und OMITS-Operatoren verwendet werden können. Der Feldname, der getestet wird, muss links im CONTAINS- oder OMITS-Operator angezeigt werden.
WHERE LAST_NAME CONTAINS 'JOHN'
Die Zeichen JOHN können sich irgendwo im Feld LAST_NAME befinden.
WHERE LAST_NAME OMITS 'JOHN'
TABLE FILE EMPLOYEE LIST LAST_NAME AND FIRST_NAME WHERE LAST_NAME CONTAINS 'ING' END
Die Ausgabe ist:
LIST LAST_NAME FIRST_NAME ---- --------- ---------- 1 BANNING JOHN 2 IRVING JOAN
Eine Maske ist ein alphanumerisches Muster, das Sie zum Vergleich mit Zeichen in einem Datenfeld angeben. Das Format des Datenfeldes muss alphanumerisch (A) sein. Sie können für das Filtern verdeckter Felder die Operatoren LIKE und NOT LIKE oder IS und IS-NOT verwenden.
Die Platzhalterzeichen für das Filtern nach verdeckten Zeichen mit:
In IF-Klauseln und den WHERE-Klauseln, die in eine oder mehrere IF-Klauseln übertragen werden können, können Sie die Zeichen $ and $* wie normale Zeichen behandeln, und nicht wie Platzhalter, indem Sie den Befehl SET EQTEST=EXACT ausgeben.
Hinweis: Die Operatoren IS (oder EQ) und IS-NOT (oder NE) unterstützen das Filtern basierend auf einer Maske nur für Formate mit festgelegter Länge. Verwenden Sie, wenn die Länge des Formats flexibel ist (z. B. AnV), die Operatoren LIKE oder NOT LIKE, um basierend auf einer Maske zu filtern.
Verwenden Sie, um nach Datensätzen mit dem LIKE-Operator zu suchen,
WHERE field LIKE 'mask'
Verwenden Sie, um Datensätze basierend auf ihrem Maskenwert abzulehnen, entweder
WHERE field NOT LIKE 'mask'
oder
WHERE NOT field LIKE 'mask'
Hierbei gilt:
Weitere Informationen zu diesem Thema finden Sie unter Beschränkungen bei Maskenzeichen.
Verwenden Sie, um nach Datensätzen mit dem LIKE-Operator zu suchen,
IF field LIKE 'mask1' [OR 'mask2'...]
Verwenden Sie, um Datensätze basierend auf ihrem Maskenwert abzulehnen,
IF field UNLIKE 'mask1' [OR 'mask2' ...]
Hierbei gilt:
Verwenden Sie, um nach Datensätzen mit dem IS-Operator zu suchen,
{WHERE|IF} field {IS|EQ} 'mask'
Verwenden Sie, um Datensätze basierend auf ihrem Maskenwert abzulehnen,
{WHERE|IF} field {IS-NOT|NE} 'mask'
Hierbei gilt:
Weitere Informationen zu diesem Thema finden Sie unter Beschränkungen bei Maskenzeichen.
Geben Sie die folgende Anfrage aus, um alle Angestellten aufzulisten, die Grundstufenkurse besucht haben, wobei jeder Grundstufenkurs mit BASIC anfängt:
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_NAME LIKE 'BASIC%' END
Die Ausgabe ist:
Setzen Sie Platzhalter vor und nach FOCUS (entspricht der Verwendung des CONTAINS-Operators), wenn Sie sehen möchten, welche Angestellten einen FOCUS-Kurs besucht haben, Sie aber nicht wissen, wo sich FOCUS im Titel befindet:
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_NAME LIKE '%FOCUS%' END
Die Ausgabe ist:
LAST_NAME FIRST_NAME COURSE_NAME COURSE_CODE --------- ---------- ----------- ----------- BLACKWOOD ROSEMARIE WHAT'S NEW IN FOCUS 202 JONES DIANE FOCUS INTERNALS 203
Geben Sie die folgende Anfrage aus, wenn Sie alle Angestellten auflisten möchten, die einen Kurs der Serie 20x besucht haben, und Sie wissen, dass alle diese Kurse bis auf das letzte Zeichen denselben Code haben:
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_CODE LIKE '20_' END
Die Ausgabe ist:
LAST_NAME FIRST_NAME COURSE_NAME COURSE_CODE --------- ---------- ----------- ----------- BLACKWOOD ROSEMARIE WHAT'S NEW IN FOCUS 202 JONES DIANE FOCUS INTERNALS 203 ADVANCED TECHNIQUES 201
Im folgenden Beispiel ist zu sehen, wie Sie nach Anfangszeichen filtern und die Länge des Feldwertes, nach dem Sie suchen, angeben. In diesem Beispiel gibt die WHERE-Phrase an, dass der Nachname mit BAN beginnen und sieben Zeichen lang sein muss (die drei Anfangszeichen BAN und die vier Platzhalter, hier Dollarzeichen). Die übrigen Zeichen im Feld (Stelle 8 bis 15) müssen leer sein.
TABLE FILE EMPLOYEE PRINT LAST_NAME WHERE LAST_NAME IS 'BAN$$$$' END
Die Ausgabe ist:
LAST_NAME --------- BANNING
Verwenden Sie das Dollarzeichen gefolgt von einem Sternchen ($*), um Datensätze mit nicht angegebener Länge abzurufen:
WHERE LAST_NAME IS 'BAN$*'
Diese Phrase sucht nach allen Nachnamen, die mit BAN beginnen, ungeachtet der Länge des Namens. Durch die Zeichen $* wird die Eingabe verkürzt und Sie können eine Filtermaske definieren, ohne die genaue Länge des Feldes, das Sie abrufen möchten, zu kennen.
SET EQTEST = {WILDCARD|EXACT}
Hierbei gilt:
Die folgende Anfrage mit der VIDEOTR2-Datenquelle erstellt zwei ähnliche E-Mail-Adressen:
DEFINE FILE VIDEOTR2 SMAIL/A18= IF EMAIL EQ 'handyman@usa.com' THEN 'handyiman@usa.com' ELSE EMAIL; SMAIL/A18 = STRREP(18,SMAIL,1,'_',1,'$',18,SMAIL); END TABLE FILE VIDEOTR2 PRINT SMAIL BY LASTNAME BY FIRSTNAME WHERE SMAIL EQ 'handy$man@usa.com' ON TABLE SET EQTEST WILDCARD END
Mit SET EQTEST=WILDCARD (der Default) gibt der WHERE-Test WHERE SMAIL IS 'handy$man@usa.com' sowohl den Datensatz mit dem $ in der Adresse als auch den Datensatz mit dem Buchstaben i in der Adresse zurück, da das Zeichen $ als Platzhalter behandelt wird, und jedes beliebige Zeichen an dieser Stelle dazu führt, dass der Datensatz den Filtertest besteht:
LASTNAME FIRSTNAME SMAIL -------- --------- ----- HANDLER EVAN handy$man@usa.com handyiman@usa.com
Wenn Sie den Befehl ON TABLE SET zu ON TABLE SET EQTEST EXACT ändern, wird nur die E-Mail-Adresse mit dem $-Zeichen zurückgegeben, da das Dollarzeichen jetzt als normales Zeichen behandelt wird und der Test nur bestanden wird, wenn es eine genaue Übereinstimmung gibt:
LASTNAME FIRSTNAME SMAIL -------- --------- ----- HANDLER EVAN handy$man@usa.com
Vorgehensweise:
Referenz: |
Sie können in der LIKE-Syntax das Escape-Zeichen verwenden, um die Maskenzeichen (% and _) im Suchmuster als Literale und nicht als Platzhalter zu behandeln. Mit dieser Methode können Sie in den Daten nach diesen Zeichen suchen. Weitere Informationen zu diesem Thema finden Sie unter Auf verdeckte Felder prüfen.
Es kann jedes Zeichen als Escape-Zeichen dienen, indem das Wort ESCAPE vorangestellt wird
WHERE fieldname LIKE 'mask' ESCAPE 'c'
Hierbei gilt:
Sie können in der LIKE- oder UNLIKE-Syntax jedes beliebige Zeichen als Escape-Zeichen verwenden, indem Sie ihm ESCAPE voranstellen
IF field {LIKE|UNLIKE} 'mask1' ESCAPE 'a' [OR 'mask2' ESCAPE 'b' ...
Hierbei gilt:
WHERE field LIKE 'ABCg_' ESCAPE 'g' OR 'ABCg%' OR 'g%ABC'
Die VIDEOTR2-Datenquelle enthält ein eMail-Adressenfeld. Sie können die folgende Anfrage ausgeben, um nach der eMail-Adresse mit den Zeichen 'handy_' zu suchen:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAIL WHERE EMAIL LIKE 'handy_%' END
Da der Unterstrich als Platzhalter fungiert, gibt diese Anfrage zwei Instanzen zurück, von denen nur eine den Unterstrich enthält.
Die Ausgabe ist:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com 0944 HANDLER EVAN handyman@usa.com
Sie müssen, um nur die Instanz abzurufen, die den Unterstrich enthält, angeben, dass der Unterstrich nicht wie ein Platzhalter, sondern wie ein normales Zeichen behandelt werden soll. Die folgende Anfrage ruft nur die Instanz mit dem Unterstrich im eMail-Feld ab:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAIL WHERE EMAIL LIKE 'handy\_%' ESCAPE '\' END
Die Ausgabe ist:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com
Die VIDEOTR2-Datenquelle enthält ein eMail-Adressenfeld. Sie können die folgende Anfrage ausgeben, um nach eMail-Adressen mit den Zeichen 'handy_' zu suchen:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAI IF EMAIL LIKE 'handy_%' END
Da der Unterstrich als Platzhalter fungiert, gibt diese Anfrage zwei Instanzen zurück, von denen nur eine den Unterstrich enthält.
Die Ausgabe ist:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com 0944 HANDLER EVAN handyman@usa.com
Sie müssen, um nur die Instanz abzurufen, die den Unterstrich enthält, angeben, dass der Unterstrich nicht wie ein Platzhalter, sondern wie ein normales Zeichen behandelt werden soll. Die folgende Anfrage ruft nur die Instanz mit dem Unterstrich im eMail-Feld ab:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAI IF EMAIL LIKE 'handy\_%' ESCAPE '\' END
Die Ausgabe ist:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com
Referenz: |
Sie können mit den Operatoren INCLUDES und EXCLUDES testen, ob Instanzen in einem gegebenen Feld in einem untergeordneten Segment alle Literale in einer Liste enthalten oder ausschließen. INCLUDES und EXCLUDES rufen nur übergeordnete Datensätze ab. Sie können in dem Feld, das für den INCLUDES- oder EXCLUDES-Test angegeben ist, kein Feld drucken oder auflisten.
Hinweis: INCLUDES und EXCLUDES können nur mit FOCUS-Datenquellen mit mehreren Segmenten verwendet werden.
Eine Anfrage, die die Phrase
WHERE JOBCODE INCLUDES A01 OR B01
enthält, gibt Angestelltendatensätze mit JOBCODE-Instanzen sowohl für A01 als auch B01 zurück, als ob Sie AND verwendet hätten.
Im folgenden Beispiel muss ein Datensatz, um ausgewählt zu werden, im JOBCODE-Feld sowohl Werte für A01 als auch für B01 enthalten:
WHERE JOBCODE INCLUDES A01 AND B01
Falls einer der beiden fehlt, wird der Datensatz für den Report nicht ausgewählt.
Beim Auswahlkriterium
WHERE JOBCODE EXCLUDES A01 AND B01
werden alle Datensätze für den Report ausgewählt, die nicht beide Werte enthalten.
In der CAR-Datenquelle produziert nur England Jaguars und Jensens, weshalb die Anfrage
TABLE FILE CAR PRINT COUNTRY WHERE CAR INCLUDES JAGUAR AND JENSEN END
diese Ausgabe erzeugt:
COUNTRY ------- ENGLAND
WebFOCUS |