Types de tests de sélection d'enregistrements

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 :


Haut de page

x
Tests de plage avec FROM et TO

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.



x
Syntaxe : Spécifier un test de plage (FROM et TO)
WHERE [TOTAL] {fieldname|expression} {FROM|IS-FROM} lower TO upper 
WHERE [TOTAL] fieldname  NOT-FROM      lower TO upper

où :

fieldname
est tout nom ou alias de champ valides.
expression
Est toute expression valide.
lower
sont des valeurs numériques ou alphanumériques ou des expressions qui indiquent les bornes supérieures d'une plage. Vous pouvez ajouter des parenthèses autour des expressions pour une meilleure lisibilité.
upper
sont des valeurs numériques ou alphanumériques ou des expressions qui indiquent les bornes supérieures d'une plage. Vous pouvez ajouter des parenthèses autour des expressions pour une meilleure lisibilité.


Exemple : Tester la plage avec FROM ... TO

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)


Exemple : Test de plage avec NOT-FROM ... TO

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


Exemple : Tests de plage sur les critères de tri avec FROM ... TO

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

Haut de page

x
Tests de plage avec GE et LE ou GT et LT

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.



x
Syntaxe : Spécifier des tests de plage avec (GE et LE)

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ù :

fieldname
est tout nom ou alias de champ valides.
lower
sont des valeurs numériques ou alphanumériques ou des expressions qui indiquent les bornes supérieures d'une plage. Vous pouvez ajouter des parenthèses autour des expressions pour une meilleure lisibilité.
upper
sont des valeurs numériques ou alphanumériques ou des expressions qui indiquent les bornes supérieures d'une plage. Vous pouvez ajouter des parenthèses autour des expressions pour une meilleure lisibilité.


Exemple : Sélectionner les valeurs à l'intérieur d'une plage

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


Exemple : Sélectionner les valeurs à l'extérieur d'une plage

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

Haut de page

x
Tests de données manquantes

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 .



x
Syntaxe : Tester la présence de données manquantes
{WHERE|IF} fieldname {EQ|IS} MISSING

où :

fieldname
est tout nom ou alias de champ valides.
EQ|IS
sont des opérateurs de sélection d'enregistrements. EQ et IS sont synonymes.


x
Syntaxe : Tester la présence de données existantes
{WHERE|IF} fieldname {NE|IS-NOT} MISSING

où :

fieldname
est tout nom ou alias de champ valides.
NE|IS-NOT
sont des opérateurs de sélection d'enregistrements. NE et IS-NOT sont synonymes.

Haut de page

x
Présélectionner les chaînes de caractères avec CONTAINS et OMITS

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.



Exemple : Sélection d'enregistrements avec CONTAINS et OMITS

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.


Haut de page

x
Présélectionner les champs masqués

Comment :

Référence :

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 :

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.



x
Syntaxe : Présélectionner des champs selon un masque (avec LIKE et NOT LIKE)

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ù :

field
est tout nom ou alias de champ valides.
mask
est une chaîne de caractères de texte ou alphanumérique que vous fournissez. Il existe deux caractères de remplacement que vous pouvez utiliser dans le masque de caractères. Le trait de soulignement (_) indique que tout caractère qui se trouve dans cette position est acceptable, et le signe de pourcentage (%) permet toute séquence suivante de zéro ou de plus de caractères.

Pour des informations connexes, consultez Limitations de masquage de caractères.



x
Syntaxe : Présélectionner avec LIKE et UNLIKE dans une expression IF

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ù :

field
est tout nom ou alias de champ valides.
mask1, mask2
sont les modèles alphanumériques que vous voulez utiliser à des fins de comparaisons. Les guillemets simples sont requis si le masque contient des espaces vides. Il existe deux caractères de remplacement que vous pouvez utiliser dans le masque de caractères. Le trait de soulignement (_) indique que tout caractère qui se trouve dans cette position est acceptable, et le signe de pourcentage (%) permet toute séquence suivante de zéro ou de plus de caractères. Tout autre caractère dans le masque s'accepte uniquement lui-même dans cette position comme une correspondance au motif.


x
Syntaxe : Présélectionner des champs selon un masque (avec IS et IS-NOT)

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ù :

field
est tout nom ou alias de champ valides.
IS|IS-NOT
sont des opérateurs de sélection d'enregistrements. EQ est synonyme de IS. NE est synonyme de IS-NOT.
mask
est une chaîne de caractères de texte ou alphanumérique que vous fournissez. Les caractères de remplacement pouvant être utilisés dans le masque sont le signe du dollar ($) et la combinaison $*. Le signe du dollar indique que tout caractère dans cette position-là est acceptable. La combinaison $* permet toute série de zéro caractères ou de plus de caractères. Le symbole $* est un moyen sténographique pour écrire une série de signes du dollar pour remplir la fin du masque sans préciser une longueur spécifique. Cette combinaison ne peut être utilisée qu'à la fin du masque.

Pour des informations connexes, consultez Limitations de masquage de caractères.



x
Référence : Limitations de masquage de caractères


Exemple : Présélection de caractères initiales

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 :



Exemple : Présélection de caractères dans l'ensemble d'un champ

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        


Exemple : Présélection de caractères initiales et d'une longueur particulière

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  


Exemple : Présélection d'enregistrements d'une longueur non spécifiée

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.



x
Syntaxe : Désactiver les caractères de remplacement
SET EQTEST = {WILDCARD|EXACT}

où :

WILDCARD
Traite les caractères $ et $* comme des caractères de remplacement. WILDCARD est la valeur par défaut.
EXACT
Traite les caractères $ et $* comme des caractères normaux, pas comme des caractères de remplacement, dans les tests IF et dans les tests WHERE qui peuvent être traduits en des tests IF.


Exemple : Sélectionner les enregistrements avec SET EQTEST

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

Haut de page

x
Utiliser un caractère d'échappement pour LIKE

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.



x
Syntaxe : Utiliser le caractère d'échappement dans une phrase WHERE

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ù :

fieldname
est tout nom de champ ou alias valide à évaluer dans le test de présélection.
mask
est le mode de recherche que vous fournissez. Les guillemets simples sont requis.
c
est tout caractère unique que vous identifiez comme caractère d'échappement. Si vous incorporez le caractère d'échappement dans le masque avant les caractères % et _, ceux-ci sont traités en tant que littéraux, non pas en tant que caractères de remplacement. Les guillemets simples sont requis.


x
Syntaxe : Spécifier un caractère d'échappement pour un masque dans une expression IF

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ù :

field
est tout nom de champ ou alias valide à évaluer dans le test de présélection.
mask1, mask2
sont les modèles de recherche que vous fournissez. Les guillemets simples sont requis.
a/b ...
sont les caractères uniques que vous identifiez comme caractères d'échappement. Chaque masque peut spécifier son propre caractère d'échappement ou utiliser le même caractère que d'autres masques. Si vous incorporez le caractère d'échappement dans le masque avant les caractères % et _, ceux-ci sont traités en tant que littéraux, non pas en tant que caractères de remplacement. Les guillemets simples sont requis si le masque contient des espaces vides.


x
Référence : Notes sur les caractères d'échappement


Exemple : Utiliser le caractère d'échappement dans une expression WHERE

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


Exemple : Utilisation d'un caractère d'échappement dans une expression IF

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

Haut de page

x
Qualifier des segments parents avec INCLUDES et EXCLUDES

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.



x
Référence : Notes d'utilisation pou INCLUDES et EXCLUDES


Exemple : Sélection d'enregistrements avec INCLUDES et EXCLUDES

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