Dans cette section : |
Vous pouvez sélectionner des enregistrements pour vos rapports en utilisant de nombreux tests qui sont implémentés à l'aide des opérateurs décrits dans Opérateurs pris en charge avec les tests WHERE et IF. Vous pouvez tester pour :
Comment : |
Pour déterminer si des valeurs de champ tombent à l'intérieur ou à l'extérieur d'une plage donnée, utilisez les opérateurs FROM ... TO et NOT-FROM ... TO. Vous pouvez employer des valeurs ou des expressions pour spécifier les bornes supérieures et inférieures. Les tests de plage peuvent aussi être appliqués à des champs de contrôle de tri. Le test de plage est spécifié juste après la phrase de tri.
Vous pouvez également tester si une expression est en dehors des limites ou pas.
WHERE [TOTAL] {fieldname|expression} {FROM|IS-FROM} lower TO upper WHERE [TOTAL] fieldname NOT-FROM lower TO upper
où :
Voici un exemple de test de plage utilisant des expressions comme bornes :
WHERE SALES FROM (DEALER_COST * 1.4) TO (DEALER_COST * 2.0)
Ce qui suit est un exemple de test de portée en utilisant des expressions comme la valeur de comparaison et les limites :
WHERE SALES * 1.5 FROM (DEALER_COST * 1.4) TO (DEALER_COST * 2.0)
L'exemple suivant illustre comment utiliser le test de plage NOT-FROM ... TO pour afficher uniquement les enregistrements qui tombent à l'extérieur de la plage spécifiée. Dans cet exemple, ce sont tous les employés dont le salaire ne tombe pas entre $12 000 et $22 000.
TABLE FILE EMPLOYEE PRINT CURR_SAL BY LAST_NAME WHERE CURR_SAL NOT-FROM 12000 TO 22000 END
La sortie est :
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
Les exemples suivants illustrent comment effectuer des tests de plage en triant un champ avec les phrases de tri BY ou ACROSS :
BY MONTH FROM 4 TO 8
ou
ACROSS MONTH FROM 6 TO 10
Comment : |
Les opérateurs GE (supérieur ou égal à), LE (inférieur ou égale à), GT (supérieur à) et LT (inférieur à) peuvent être utilisés pour spécifier une plage.
Les opérateurs GE ... LE vous permettent de spécifier des valeurs à l'intérieur des bornes de test de plage.
Les opérateurs LT ...GT vous permettent de spécifier des valeurs à l'extérieur des bornes de test de plage.
Pour sélectionner des valeurs qui tombent à l'intérieur d'une plage, utilisez
WHERE fieldname GE lower AND fieldname LE upper
Pour rechercher des enregistrements dont les valeurs ne tombent pas à l'intérieur d'une plage spécifiée, utilisez
WHERE fieldname LT lower OR fieldname GT upper
où :
Cette phrase WHERE sélectionne des enregistrements dans lesquels la valeur UNIT est entre 10 000 et 14 000.
WHERE UNITS GE 10000 AND UNITS LE 14000
Cet exemple est équivalent à :
WHERE UNITS GE 10000 WHERE UNITS LE 14000
L'exemple suivant illustre comment sélectionner des valeurs qui tombent à l'extérieur d'une plage de valeurs en utilisant les opérateurs LT et GT. Dans cet exemple, seuls les employés dont le salaire est inférieur à $12 000 et supérieur à $22 000 sont compris dans la sortie.
TABLE FILE EMPLOYEE PRINT CURR_SAL BY LAST_NAME WHERE CURR_SAL LT 12000 OR CURR_SAL GT 22000 END
La sortie est :
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
Comment : |
Lors de la création de rapports, vous avez la possibilité de tester la présence de données manquantes. Ce type de test est le plus efficac lorsque l'attribut MISSING est activé (ON) dans le fichier Master pour les champs avec des données manquantes. Pour plus d'informations sur les données manquantes, consultez Gestion d'enregistrements avec des valeurs de champs manquantes et à Description de données en langage WebFOCUS .
{WHERE|IF} fieldname {EQ|IS} MISSING
où :
Les opérateurs CONTAINS et OMITS testent les champs alphanumériques lorsqu'ils sont utilisés avec WHERE, et les champs alphanumériques et de texte lorsqu'ils sont utilisés avec IF. Le test CONTAINS réussit si des caractères dans le(s) littéral(aux) donné(s) s'affichent au sein des caractères de la valeur de champ.
OMITS est l'opposé de CONTAINS ; si les caractères dans le(s) littéral(aux) s'affichent au sein des caractères de la valeur de champ, le test échoue.
Les tests CONTAINS et OMITS sont utiles lorsque vous ne connaissez pas l'orthographe exacte d'une valeur. Tant que vous savez qu'une chaîne particulière se trouve au sein de la valeur, vous pouvez récupérer les données désirées.
Les exemples suivants illustrent plusieurs moyens d'utiliser les opérateurs CONTAINS et OMITS. Le nom de champ que l'on teste doit apparaître à gauche de l'opérateur CONTAINS ou OMITS.
WHERE LAST_NAME CONTAINS 'JOHN'
Le champ LAST_NAME peut contenir les caractères JOHN n'importe où dans le champ.
WHERE LAST_NAME OMITS 'JOHN'
TABLE FILE EMPLOYEE LIST LAST_NAME AND FIRST_NAME WHERE LAST_NAME CONTAINS 'ING' END
La sortie est :
LIST LAST_NAME FIRST_NAME ---- --------- ---------- 1 BANNING JOHN 2 IRVING JOAN
Un masque est un motif alphanumérique que vous fournissez pour une comparaison avec des caractères dans un champ de données. Le champ de données doit être au format alphanumérique (A). Vous pouvez utiliser les opérateurs LIKE et NOT LIKE ou IS et IS-NOT pour effectuer la présélection des champs masqués.
Les caractères de remplacement pour la présélection des champs masqués avec :
Dans les clauses IF et dans les clauses WHERE qui peuvent être traduites en une ou plusieurs clauses IF, vous pouvez traiter les caractères $ et $* comme des caractères normaux plutôt que des caractères de remplacement en lançant la commande SET EQTEST=EXACT.
Remarque : les opérateurs IS (ou EQ) et IS-NOT (ou NE) prennent en charge la présélection selon un masque uniquement pour les formats à longueur fixe. Si le format est à longueur variable, par exemple, AnV, vous devez utiliser l'opérateur LIKE ou NOT LIKE pour effectuer la présélection selon un masque.
Pour rechercher des enregistrements avec l'opérateur LIKE, utilisez
WHERE field LIKE 'mask'
Pour rejeter des enregistrements selon la valeur de masque, utilisez
WHERE field NOT LIKE 'mask'
ou
WHERE NOT field LIKE 'mask'
où :
Pour des informations connexes, consultez Limitations de masquage de caractères.
Pour rechercher des enregistrements avec l'opérateur LIKE, utilisez
IF field LIKE 'mask1' [OR 'mask2'...]
Pour rejeter des enregistrements selon la valeur de masque, utilisez
IF field UNLIKE 'mask1' [OR 'mask2' ...]
où :
Pour rechercher des enregistrements avec l'opérateur IS, utilisez
{WHERE|IF} field {IS|EQ} 'mask'
Pour rejeter des enregistrements selon la valeur de masque, utilisez
{WHERE|IF} field {IS-NOT|NE} 'mask'
où :
Pour des informations connexes, consultez Limitations de masquage de caractères.
Pour lister tous les employés qui ont suivi des formations de niveau élémentaire, où toute formation de niveau élémentaire commence par le mot BASIC, lancez la requête suivante :
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_NAME LIKE 'BASIC%' END
La sortie est :
Si vous souhaitez savoir quels employés ont suivi une formation FOCUS, mais vous ne savez pas où se trouve le mot FOCUS dans le titre, mettez le mot FOCUS entre caractères de remplacement (ce qui est équivalent à utiliser l'opérateur CONTAINS) :
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_NAME LIKE '%FOCUS%' END
La sortie est :
LAST_NAME FIRST_NAME COURSE_NAME COURSE_CODE --------- ---------- ----------- ----------- BLACKWOOD ROSEMARIE WHAT'S NEW IN FOCUS 202 JONES DIANE FOCUS INTERNALS 203
Si vous souhaitez lister tous les employés qui ont suivi une formation de niveau 20x, et que vous savez que toutes ces formations ont le même code sauf le dernier caractère, lancez la requête suivante :
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_CODE LIKE '20_' END
La sortie est :
LAST_NAME FIRST_NAME COURSE_NAME COURSE_CODE --------- ---------- ----------- ----------- BLACKWOOD ROSEMARIE WHAT'S NEW IN FOCUS 202 JONES DIANE FOCUS INTERNALS 203 ADVANCED TECHNIQUES 201
L'exemple suivant illustre comment présélectionner des caractères initiales et spécifier la longueur de la valeur de champ pour laquelle vous effectuez une présélection. Dans cet exemple, la phrase WHERE indique que le nom doit commencer par BAN et d'une longueur de sept caractères (trois caractères initiales BAN et quatre espaces réservés, dans ce cas, le symbole dollar). Les caractères qui restent dans le champ (les positions 8 à 15) doivent être blancs.
TABLE FILE EMPLOYEE PRINT LAST_NAME WHERE LAST_NAME IS 'BAN$$$$' END
La sortie est :
LAST_NAME --------- BANNING
Pour récupérer des enregistrements de longueurs non spécifiées, utilisez le signe du dollar suivi d'un astérisque ($*) :
WHERE LAST_NAME IS 'BAN$*'
Cette phrase recherche les noms commençant par les lettres BAN, quel que soit la longueur du nom. Les caractères $* réduisent la saisie, et vous permettent de définir un masque d'écran sans devoir connaître la longueur exacte du champ que vous souhaitez récupérer.
SET EQTEST = {WILDCARD|EXACT}
où :
La requête suivante contre la source de données VIDEOTR2 crée deux adresses e-mail similaires :
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
Avec SET EQTEST=WILDCARD (la valeur par défaut), le test WHERE WHERE SMAIL IS ‘handy$man@usa.com’ renvoie à la fois l'enregistrement avec $ dans l'adresse et l'enregistrement avec la lettre i dans l'adresse, parce que $ est traité comme caractère générique, et n'importe quel caractère dans cette position entraîne l'enregistrement à passer le test de filtrage :
LASTNAME FIRSTNAME SMAIL -------- --------- ----- HANDLER EVAN handy$man@usa.com handyiman@usa.com
Modifiez la commande ON TABLE SET en ON TABLE SET EQTEST EXAC renvoie seulement l'adresse e-mail ONE avec le caractère $ puisque le symbole dollar est traité maintenant comme un caractère normal et passe le test seulement s'il y a une correspondance exacte :
LASTNAME FIRSTNAME SMAIL -------- --------- ----- HANDLER EVAN handy$man@usa.com
Comment :
Référence : |
Le caractère d'échappement, lorsqu'il est utilisé dans la syntaxe LIKE, traite les caractères de masquage (% et _) en tant que littéraux au sein d'un mode de recherche, et non pas en tant que caractères de remplacement. A l'aide de cette technique, vous pouvez rechercher ces caractères dans les données. Consultez Présélectionner les champs masqués.
Tout caractère unique peut être utilisé comme caractère d'échappement, tant que le mot ESCAPE le précède.
WHERE fieldname LIKE 'mask' ESCAPE 'c'
où :
Vous pouvez affectez un caractère unique comme caractère d'échappement en le préfaçant du mot ESCAPE dans la syntaxe LIKE ou UNLIKE
IF field {LIKE|UNLIKE} 'mask1' ESCAPE 'a' [OR 'mask2' ESCAPE 'b' ...
où :
WHERE field LIKE 'ABCg_' ESCAPE 'g' OR 'ABCg%' OR 'g%ABC'
La source de données VIDEOTR2 contient un champ d'adresse électronique. Pour rechercher les adresses e-mail contenant les caractères 'handy_', lancez la requête suivante :
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAIL WHERE EMAIL LIKE 'handy_%' END
Comme le caractère de soulignement sert de caractère de remplacement, cette requête renvoie deux instances, dont une qui contient le caractère de soulignement.
La sortie est :
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com 0944 HANDLER EVAN handyman@usa.com
Pour ne récupérer que les instances d'adresse électronique contenant un soulignement, il faut indiquer que le caractère de soulignement doit être traité comme caractère normal, et non comme caractère de remplacement. La requête suivante ne récupère que les instances contenant le caractère de soulignement dans le champ e-mail :
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAIL WHERE EMAIL LIKE 'handy\_%' ESCAPE '\' END
La sortie est :
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com
La source de données VIDEOTR2 contient un champ d'adresse électronique. Pour rechercher les adresses e-mails avec les caractères 'handy_' vous pouvez émettre la requête suivante :
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAI IF EMAIL LIKE 'handy_%' END
Comme le caractère de soulignement sert de caractère de remplacement, cette requête renvoie deux instances, dont une qui contient le caractère de soulignement.
La sortie est :
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com 0944 HANDLER EVAN handyman@usa.com
Pour ne récupérer que les instances d'adresse électronique contenant un soulignement, il faut indiquer que le caractère de soulignement doit être traité comme caractère normal, et non comme caractère de remplacement. La requête suivante ne récupère que les instances contenant le caractère de soulignement dans le champ e-mail :
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAI IF EMAIL LIKE 'handy\_%' ESCAPE '\' END
La sortie est :
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com
Référence : |
Vous pouvez tester si des instances d'un champ donné dans un segment enfant incluent ou excluent tous les littéraux dans une liste en utilisant les opérateurs INCLUDES et EXCLUDES. Les opérateurs INCLUDES et EXCLUDES ne récupèrent que des enregistrements parents. Vous ne pouvez pas imprimer ou lister un champ qui se trouve dans le même segment que le champ spécifié pour le test INCLUDES ou EXCLUDES.
Remarque : INCLUDES et EXCLUDES ne fonctionnent qu'avec les sources de données FOCUS à segments multiples.
Une requête contenant la phrase
WHERE JOBCODE INCLUDES A01 OR B01
renvoie les enregistrements d'employé avec des instances de JOBCODE pour A01 et B01, comme si vous avez utilisé AND.
Dans l'exemple suivant, pour qu'un enregistrement soit sélectionné, le champ JOBCODE doit avoir les valeurs de A01 et B01 :
WHERE JOBCODE INCLUDES A01 AND B01
Si aucune des deux valeurs est manquante, l'enregistrement n'est pas sélectionné pour le rapport.
Si le critère de sélection est
WHERE JOBCODE EXCLUDES A01 AND B01
Chaque rapport sélectionne tout enregistrement qui ne comporte pas les deux valeurs.
Dans la source de données CAR, comme l'Angleterre est le seul pays producteur de Jaguar et Jensen, la requête
TABLE FILE CAR PRINT COUNTRY WHERE CAR INCLUDES JAGUAR AND JENSEN END
génère cette sortie :
COUNTRY ------- ENGLAND
WebFOCUS |