WHERE

Cet élément est facultatif. Il spécifie une ou plusieurs conditions que les enregistrements à transférer doivent remplir.

Pour transférer des enregistrements récapitulatifs, utilisez cet élément pour spécifier quels enregistrements doivent être regroupés, puis regroupez les enregistrements. A l'aide de cet élément, vous pouvez spécifier une ou plusieurs conditions que l'enregistrement doit remplir pour appartenir à un certain groupe. Lorsque WHERE n'est pas spécifié, tous les enregistrements sont regroupés.

Comme pour les conditions, spécifiez le test à appliquer aux enregistrements dans le membre de fichier spécifié. Tous les enregistrements du membre de fichier spécifié sont testés pour les conditions spécifiées ici. Seuls les enregistrements qui réussissent ce test sont transférés.

Lorsque WHERE n'est pas spécifié, tous les enregistrements du membre de fichier spécifié sont transférés.

Le format des conditions est le suivant :
field-name test value
field-name
Il doit s'agir d'une sous-chaîne de champ ou d'un nom de champ défini dans le format d'enregistrement.

Les champs ou les constantes peuvent être manipulés en spécifiant une fonction prise en charge, les résultats étant utilisés à des fins de comparaison. Les fonctions prises en charge et l'utilisation sont les suivantes :

SUBSTR
Renvoie la partie spécifiée d'une chaîne de caractères. Cette fonction contient trois paramètres : le nom du champ, la position de départ et la longueur de la sous-chaîne renvoyée. L'exemple suivant renvoie les 20 caractères à partir du 10ème caractère du champ FULLNAME :

SUBSTR(FULLNAME 10 20)

VALUE
Renvoie la première valeur non Null de la liste de paramètres. (Si tous les paramètres sont Null, Null est renvoyé.)

VALUE(DEPOSIT WITHDRAW BALANCE)

CURRENT
Renvoie DATE, TIME, TIMEZONE ou TIMESTAMP pour le système actuel.

CURRENT(TIMEZONE)

DIGITS
Renvoie une représentation sous forme de chaîne de caractères d'un champ numérique.

DIGITS(EMPLOYEE#)

CAR
Renvoie une représentation sous forme de chaîne de caractères du champ de date, du champ d'heure ou du champ d'horodatage. Le deuxième paramètre est utilisé pour spécifier le format de l'architecture unifiée d'applications® (SAA®) de la chaîne à renvoyer (les valeurs prises en charge sont USA, EUR, ISO ou JIS).

CHAR(DATEHIRE USA)

DATE
Renvoie la date du champ d'horodatage.

DATE(TIMECRTD)

DATE
Renvoie l'heure du champ d'horodatage.

TIME(TIMECRTD)

TIMESTAMP
Renvoie l'horodatage, combinant le champ de date et le champ d'heure.

TIMESTAMP(DATESEND TIMESEND)

YEAR
Renvoie l'année du champ de date ou du champ d'horodatage.

YEAR(DATEHIRE)

MOIS
Renvoie le mois du champ de date ou du champ d'horodatage.

MONTH(DATEHIRE)

JOUR
Renvoie la date du champ de date ou du champ d'horodatage.

DAY(DATEHIRE)

DAYS
Renvoie le jour de l'année, compté à partir du 1er janvier, du champ de date ou du champ d'horodatage.

DAYS(DATEHIRE)

HOUR
Renvoie l'heure du champ d'heure ou du champ d'horodatage.

HOUR(TIMESEND)

MINUTE
Renvoie la minute du champ d'heure ou du champ d'horodatage.

MINUTE(TIMESEND)

SECOND
Renvoie la seconde du champ d'heure ou du champ d'horodatage.

SECOND(TIMESEND)

MICROSECOND
Renvoie la microseconde du champ d'heure ou du champ d'horodatage.

MICROSECOND(TIMECRTD)

test
Il s'agit du type de comparaison à appliquer aux champs ou aux fonctions.
Les tests suivants peuvent être utilisés. Un ou plusieurs espaces peuvent être placés avant et après ces tests.
Note : Les valeurs sont recherchées en fonction des caractères exacts spécifiés par l'utilisateur. En d'autres termes, lorsque la spécification de l'utilisateur est constituée uniquement de caractères majuscules, seules les chaînes de caractères majuscules sont renvoyées. De même, lorsque la spécification comporte uniquement des caractères minuscules, seules les chaînes de caractères minuscules sont renvoyées.
=
Signe égal
<> ou ><
Différent de
>
Supérieur à
>=
Supérieur ou égal à
<
Inférieur à
<=
Inférieur ou égal à
LIKE
Le champ est similaire à la valeur spécifiée.
BETWEEN
Le champ est égal à l'une des deux constantes, ou à une valeur intermédiaire.
IN
Le champ est identique à l'une des valeurs de la liste des constantes.
EST
Le champ contient des valeurs nulles.
ISNOT
Le champ ne contient aucune valeur nulle.
L'utilisation des tests est la suivante :
Utilisation du test LIKE
Le test LIKE vérifie dans le champ spécifié avec le nom du champ un modèle de caractère spécifié comme valeur. Le champ à préciser doit être un champ de caractères.

Les valeurs à tester doivent être des constantes de chaîne de caractères. Cette chaîne peut contenir n'importe quel caractère. Un caractère de pourcentage (%) indique une chaîne de caractères composée de zéro ou plusieurs caractères. Un caractère de soulignement (_) de 1 octet indique tout caractère unique de 1 octet. Un caractère de soulignement (_) de 2 octets indique n'importe quel caractère unique de 2 octets.

L'exemple suivant explique comment utiliser le test LIKE :
NAME LIKE '%ANNE%'

L'exemple précédent recherche les noms contenant la chaîne de caractères ANNE, tels que ANNE, ANNETTE et SUZANNE.

L'exemple suivant recherche les noms commençant par la chaîne de caractères ANNE, tels que ANNE et ANNETTE.
NAME LIKE 'ANNE%'
L'exemple suivant recherche les noms se terminant par la chaîne de caractères ANNE, tels que ANNE et SUZANNE.
NAME LIKE '%ANNE'
L'exemple suivant recherche tous les noms dont le deuxième caractère est A.
NAME LIKE '_A%'
L'exemple suivant recherche tous les noms de famille commençant par le caractère J.
LSTNAM LIKE 'J%'
Cela a le même effet que l'exemple suivant :
SUBSTR (LSTNAM,1,1) = 'J'

Lorsque le modèle ne comporte pas de caractère pourcentage (%), la longueur de la chaîne de caractères doit être identique à celle du champ.

Utilisation du test BETWEEN
Le test BETWEEN vérifie les champs spécifiés dans le nom du champ pour les chaînes de caractères ou les valeurs numériques égales ou comprises entre les constantes spécifiées. Les valeurs à tester doivent être deux constantes de chaîne de caractères ou deux constantes numériques. Les types de ces constantes doivent être identiques à celui du nom de champ spécifié par l'utilisateur. Délimitez les deux constantes par AND.
L'exemple suivant recherche les enregistrements dont le prix est compris entre 50,35 et 75,3 inclus :
PRICE BETWEEN 50.35 AND 75.3
L'exemple suivant recherche les enregistrements dont le nom commence par C :
NAME BETWEEN 'C' AND 'CZZZZZZZZZ'
L'exemple suivant recherche les enregistrements dont le solde est compris entre 0 et 5␠000.
BALDUE BETWEEN 0 AND 5000
Cela a la même signification que l’expression suivante.
BALDUE >= 0 AND BALDUE <= 5000
Note : Précisez les valeurs à tester sous la forme BETWEEN (minimum) AND (maximum). Par exemple, BETWEEN 1 AND 10 est une spécification valide. Cependant, BETWEEN 10 AND 1 ne renvoie aucun enregistrement.
Utilisation du test IN
Le test IN vérifie les champs spécifiés dans le nom du champ pour les chaînes de caractères ou les valeurs numériques dans la liste spécifiée comme valeur. La valeur à tester doit être une liste de constantes de chaîne de caractères ou de constantes numériques. De plus, les types de ces constantes doivent être identiques à celui du champ spécifié. Délimitez les constantes par des espaces et placez-les entre parenthèses. Jusqu'à 100 constantes peuvent être spécifiées. L'exemple suivant montre comment utiliser le test IN :
NAME IN ('SMITH' 'JONES' 'ANDERSON')
Cet exemple recherche les enregistrements dont le nom est SMITH, JONES ou ANDERSON.
L'exemple suivant recherche les valeurs dans le champ ETAT dont la valeur est autre que NY, MN ou TX :
NOT STATE IN ('NY' 'MN' 'TX')
Note : Les valeurs sont recherchées en fonction des caractères exacts spécifiés par l'utilisateur. En d’autres termes, lorsque la spécification de l’utilisateur ne contient que des caractères majuscules, seules les chaînes de caractères majuscules sont renvoyées. De même, lorsque la spécification ne contient que des caractères minuscules, seules les chaînes de caractères minuscules sont renvoyées.
Utilisation du test IS
Le test IS vérifie les champs spécifiés dans le nom du champ pour les valeurs nulles.
L'exemple suivant recherche les enregistrements pour lesquels le champ Commission contient des valeurs nulles :
COMMISSIONS IS NULL
Utilisation du test ISNOT
Le test ISNOT vérifie les champs spécifiés dans le nom du champ pour les valeurs non Null.
L'exemple suivant recherche les enregistrements pour lesquels le champ Commission ne contient pas de valeurs Null :
COMMISSIONS ISNOT NULL
Dans le test, le AND logique et le OR logique peuvent être combinés. Lorsque AND et OR sont spécifiés, la comparaison AND est effectuée en premier. Jusqu'à 50 conditions peuvent être spécifiées. Par exemple :
MONTH=2 AND LOC='MIAMI' OR LOC='CHICAGO'
Dans cet exemple, chaque enregistrement à sélectionner doit remplir la condition suivante :
MONTH=2 AND LOC='MIAMI'
ou doit remplir à la condition suivante :
LOC='CHICAGO'
Cette commande peut être modifiée en utilisant des parenthèses. Par exemple :
MONTH=2 AND (LOC='MIAMI' OR LOC='CHICAGO')
Dans cet exemple, chaque enregistrement à sélectionner doit remplir la condition suivante :
MONTH=2
et il doit remplir à la condition suivante :
LOC='MIAMI' OR LOC='CHICAGO'
PAS peut également être utilisé. L'exemple suivant sélectionne les éléments pour lesquels les données sont transférées non seulement à partir des enregistrements dans lesquels le champ DEPT n'est pas égal à 470, mais également à partir des enregistrements pour lesquels le champ DEPT est égal à 470 et, de plus, STATE est égal à NY.
NOT (DEPT = 470) OR (DEPT = 470 AND STATE = 'NY')

La comparaison peut commencer à partir d’une certaine ligne et se terminer à la ligne suivante. Cependant, un nom de champ ne peut pas commencer à une certaine ligne et se terminer à la ligne suivante. Les noms de champs ne doivent pas dépasser une ligne.

Lorsqu'une valeur à tester est une chaîne de caractères entourée de guillemets, la valeur peut commencer à partir d'une certaine ligne et continuer jusqu'à la ligne suivante.