Puede seleccionar registros para sus informes mediante una variedad de pruebas implementadas con operadores, descritas en Operadores admitidos para pruebas WHERE e IF. Puede probar:
Cómo: |
Utilice los operadores FROM ... TO y NOT-FROM ... TO para determinar si los valores de campo caen dentro o fuera de un rango determinado. Puede utilizar valores o expresiones para especificar los límites inferior y superior. También se pueden aplicar pruebas de rango en los campos de control de clasificación. La prueba de rango se especifica inmediatamente después de la frase de clasificación.
También puede probar si la expresión cae dentro o fuera de los límites.
WHERE [TOTAL] {fieldname|expression} {FROM|IS-FROM} lower TO upper WHERE [TOTAL] fieldname NOT-FROM lower TO upper
donde:
A continuación, un ejemplo de una prueba de rango limitada por expresiones:
WHERE SALES FROM (DEALER_COST * 1.4) TO (DEALER_COST * 2.0)
El ejemplo siguiente presenta una prueba de rango que emplea las expresiones como el valor de comparación y los límites:
WHERE SALES * 1.5 FROM (DEALER_COST * 1.4) TO (DEALER_COST * 2.0)
A continuación se muestra cómo se puede utilizar la prueba de rango NOT-FROM ... TO para mostrar solamente los registros que caigan dentro de un rango determinado. En este ejemplo, se trata de todos los empleados cuyos salarios no correspondan al rango que va de los $12,000 a los $22,000.
TABLE FILE EMPLOYEE PRINT CURR_SAL BY LAST_NAME WHERE CURR_SAL NOT-FROM 12000 TO 22000 END
La salida es:
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
Los siguientes ejemplos muestran cómo realizar pruebas de rango al clasificar un campo mediante las frases de clasificación BY o ACROSS:
BY MONTH FROM 4 TO 8
o
ACROSS MONTH FROM 6 TO 10
Cómo: |
Los operadores GE (mayor o igual que), LE (menor o igual que), GT (mayor que) y LT (menor que) se pueden utilizar para especificar un rango.
GE ... LE le permiten especificar valores dentro de los límites de la prueba de rango.
LT ...GT le permiten especificar valores fuera de los límites de la prueba de rango.
Para seleccionar valores que caigan dentro de un rango, utilice
WHERE fieldname GE lower AND fieldname LE upper
Para encontrar registros cuyos valores no caigan en un rango especificado, utilice
WHERE fieldname LT lower OR fieldname GT upper
donde:
Esta frase WHERE selecciona informes en que el valor UNIT se encuentra entre 10,000 and 14,000.
WHERE UNITS GE 10000 AND UNITS LE 14000
Este ejemplo equivale a:
WHERE UNITS GE 10000 WHERE UNITS LE 14000
A continuación se muestra cómo seleccionar valores que se encuentren fuera de una rango de valores mediante los operadores LT y GT. En este ejemplo, sólo los empleados cuyos salarios sen menores de $12,000 y mayores de $22,000 se incluyen en el resultado.
TABLE FILE EMPLOYEE PRINT CURR_SAL BY LAST_NAME WHERE CURR_SAL LT 12000 OR CURR_SAL GT 22000 END
La salida es:
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
Cómo: |
Al crear solicitudes de informe, podría querer hacer pruebas en busca de datos no disponibles. Este tipo de pueba resulta útil cuando el atributo MISSING de campos con datos no disponibles está activado en el archivo máster. Para más información sobre datos no disponibles, consulte Cómo manejar registros con valores de campo no disponibles y el manual Cómo describir datos con el lenguaje WebFOCUS .
{WHERE|IF} fieldname {EQ|IS} MISSING
donde:
Los operadores CONTAINS y OMITS prueban campos alfanuméricos cuando se utilizan con WHERE y, además, campos alfanuméricos y campos de texto cuando se utilizan con IF. En el caso de CONTAINS, si los caracteres en el literal o los literales dados aparecen en cualquier punto entre los caracteres del valor de campo, la prueba es exitosa.
OMITS es lo opuesto de CONTAINS. Si los caracteres en el literal o los literales dados aparecen en cualquier punto entre los caracteres del valor de campo, falla la prueba.
Las pruebas con CONTAINS y OMITS son útiles cuando no sabe cómo deletrear un valor con precisión. Puede recuperar los datos deseados con sólo saber que una cadena específica aparece en un valor.
Los ejemplos que siguen muestran varias formas en que se pueden utilizar los operadores CONTAINS y OMITS. El nombre de campo que se prueba debe aparecer en el lado izquierdo del operador CONTAINS y OMITS.
WHERE LAST_NAME CONTAINS 'JOHN'
El campo LAST_NAME podría contener los caracteres JOHN en cualquier parte del campo.
WHERE LAST_NAME OMITS 'JOHN'
TABLE FILE EMPLOYEE LIST LAST_NAME AND FIRST_NAME WHERE LAST_NAME CONTAINS 'ING' END
La salida es:
LIST LAST_NAME FIRST_NAME ---- --------- ---------- 1 BANNING JOHN 2 IRVING JOAN
Una máscara es un patrón alfanumérico que proporciona para comparar caracteres en un campo de datos. El campo de datos deben tener formato alfanumérico (A). Puede utilizar los operadores LIKE y NOT LIKE o bien IS e IS-NOT para realizar filtraje de campos enmascarados.
Los carácteres comodín para filtrar campos enmascarados con:
En las cláusulas IF y cláusulas WHERE que puedan traducirse a una o varias cláusulas IF, puede tratar los caracteres $ y $* como si fuesen normales, y no comodines, emitiendo el comando SET EQTEST=EXACT.
Nota: Los operadores IS (o EQ) e IS-NOT sólo admiten filtraje basado en una máscara para formatos de longitud fija. Si el formato es de longitud variable, por ejemplo, AnV, emplee el operador LIKE o NOT LIKE para realizar filtraje basado en una máscara.
Para buscar registros con el operador LIKE, utilice
WHERE field LIKE 'mask'
Para rechazar registros basados en el valor de máscara, utilice
WHERE field NOT LIKE 'mask'
o
WHERE NOT field LIKE 'mask'
donde:
Para obtener información relacionada, consulte Restricciones de caracteres de enmascaramiento.
Para buscar registros con el operador LIKE, utilice
IF field LIKE 'mask1' [OR 'mask2'...]
Para rechazar registros basados en el valor de máscara, utilice
IF field UNLIKE 'mask1' [OR 'mask2' ...]
donde:
Para buscar registros con el operador IS, utilice
{WHERE|IF} field {IS|EQ} 'mask'
Para rechazar registros basados en el valor de máscara, utilice
{WHERE|IF} field {IS-NOT|NE} 'mask'
donde:
Para obtener información relacionada, consulte Restricciones de caracteres de enmascaramiento.
Para listar a todos los empleados que hayan tomado cursos de nivel básico, si curso básico empieza con la palabra BASIC, emita la siguiente solicitud:
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_NAME LIKE 'BASIC%' END
La salida es:
Si desea ver cuáles empleados han tomado un curso de FOCUS, pero no sabe dónde aparece la palabra FOCUS en el título, ponga la palabra FOCUS entre llaves con comodines (lo que equivale a utilizar el operador CONTAINS):
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_NAME LIKE '%FOCUS%' END
La salida es:
LAST_NAME FIRST_NAME COURSE_NAME COURSE_CODE --------- ---------- ----------- ----------- BLACKWOOD ROSEMARIE WHAT'S NEW IN FOCUS 202 JONES DIANE FOCUS INTERNALS 203
Si desea ver listar a todos los empleados que han tomado un curso de la serie 20x, pero no sabe si todos estos cursos tienen el mismo código excepto por el carácter final, emita la solicitud que sigue:
TABLE FILE EMPLOYEE PRINT COURSE_NAME COURSE_CODE BY LAST_NAME BY FIRST_NAME WHERE COURSE_CODE LIKE '20_' END
La salida es:
LAST_NAME FIRST_NAME COURSE_NAME COURSE_CODE --------- ---------- ----------- ----------- BLACKWOOD ROSEMARIE WHAT'S NEW IN FOCUS 202 JONES DIANE FOCUS INTERNALS 203 ADVANCED TECHNIQUES 201
El ejemplo siguiente muestra cómo filtrar caracteres iniciales y especificar la longitud del valor de campo por el que busca. En este ejemplo, la frase WHERE establece que el apellido debe empezar por BAN y tener una longitud de siete caracteres (los tres primeros caracteres BAN más cuatro marcadores de posición, en este caso, el signo de dólar). Los caracteres restantes en el campo (de las posiciones 8 a 15) deben estar en blanco.
TABLE FILE EMPLOYEE PRINT LAST_NAME WHERE LAST_NAME IS 'BAN$$$$' END
La salida es:
LAST_NAME --------- BANNING
Para recuperar registros con longitudes no especificadas, utilice el signo de dólar seguido de un asterisco ($*).
WHERE LAST_NAME IS 'BAN$*'
Esta frase busca apellidos que empiecen por las letras BAN, independientemente de la longitud del nombre. Los caracteres $* reducen la redacción tecleada y le permiten definir una máscara de filtrado sin conocer la longitud exacta del campo que desee recuperar.
SET EQTEST = {WILDCARD|EXACT}
donde:
La siguiente solicitud, basada en el origen de datos VIDEOTR2, crea dos direcciones de e-mail parecidas:
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
Con SET EQTEST = WILDCARD (por defecto), la prueba WHERE WHERE SMAIL IS ‘handy$man@usa.com’ devuelve ambos registros, el que contiene el símbolo $ y el que contiene la letra i, en la dirección, puesto que $ se se considera un comodín; cualquier carácter que se encuentre en esta posición hace que el registro pase la prueba de filtraje:
LASTNAME FIRSTNAME SMAIL -------- --------- ----- HANDLER EVAN handy$man@usa.com handyiman@usa.com
Si cambia el comando ON TABLE SET a ON TABLE SET EQTEST EXACT, se devuelve únicamente la dirección de e-mail con el carácter $, ya que ahora el signo de dólar se trata como si fuese normal y sólo pasa la prueba cuando existe una pareja exacta:
LASTNAME FIRSTNAME SMAIL -------- --------- ----- HANDLER EVAN handy$man@usa.com
Cómo:
Referencia: |
Puede utilizar un carácter de escape en la sintaxis LIKE para tratar los caracteres de enmascaramiento (% y _) como literales en el patrón de búsqueda, en vez de como comodines. Esta técnica le permite buscar estos caracteres en los datos. Para obtener información relacionada, consulte Cómo filtrar en campos enmascarados.
Se puede usar cualquier carácter para escape, siempre que vaya precedido de la palabra ESCAPE.
WHERE fieldname LIKE 'mask' ESCAPE 'c'
donde:
Para especificar cualquier carácter individual como carácter de escape, anteponga la palabra ESCAPE al carácter, en la sintaxis LIKE o UNLIKE
IF field {LIKE|UNLIKE} 'mask1' ESCAPE 'a' [OR 'mask2' ESCAPE 'b' ...
donde:
WHERE field LIKE 'ABCg_' ESCAPE 'g' OR 'ABCg%' OR 'g%ABC'
El origen de datos VIDEOTR2 contiene un campo de dirección de e-mail. Para buscar la dirección de e-mail con los caracteres 'handy_' puede emitir la siguiente solicitud:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAIL WHERE EMAIL LIKE 'handy_%' END
Dado que el carácter de subrayado funciona como carácter comodín, esta solicitud devuelve dos casos, sólo uno de los cuales contiene el carácter subrayado.
La salida es:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com 0944 HANDLER EVAN handyman@usa.com
Para recuperar sólo el caso que contiene el carácter de subrayado, debe indicar que el subrayado debe manejarse como un carácter normal, no como un comodín. La siguiente solicitud recupera únicamente el caso que incluya el carácter de subrayado en el campo de e-mail:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAIL WHERE EMAIL LIKE 'handy\_%' ESCAPE '\' END
La salida es:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com
El origen de datos VIDEOTR2 contiene un campo de dirección de e-mail. Para buscar las direcciones de e-mail con los caracteres 'handy_' puede emitir la siguiente solicitud:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAI IF EMAIL LIKE 'handy_%' END
Dado que el carácter de subrayado funciona como carácter comodín, esta solicitud devuelve dos casos, sólo uno de los cuales contiene el carácter subrayado.
La salida es:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com 0944 HANDLER EVAN handyman@usa.com
Para recuperar sólo el caso que contiene el carácter de subrayado, debe indicar que el subrayado debe manejarse como un carácter normal, no como un comodín. La siguiente solicitud recupera únicamente el caso que incluya el carácter de subrayado en el campo de e-mail:
TABLE FILE VIDEOTR2 PRINT CUSTID LASTNAME FIRSTNAME EMAI IF EMAIL LIKE 'handy\_%' ESCAPE '\' END
La salida es:
CUSTID LASTNAME FIRSTNAME EMAIL ------ -------- --------- ----- 0944 HANDLER EVAN handy_man@usa.com
Referencia: |
Puede probar si los casos de un campo dado en un segmento secundario incluyen o excluyen todos los literales en una lista mediante los operadores INCLUDES y EXCLUDES. INCLUDES y EXCLUDES recuperan sólo registros principales. No puede imprimir o listar en el mismo segmento que el campo especificado para la prueba INCLUDES y EXCLUDES.
Nota: Los INCLUDES y EXCLUDES sólo funcionan con orígenes de datos de FOCUS con múltiples segmentos.
Una solicitud que contiene una frase
WHERE JOBCODE INCLUDES A01 OR B01
devuelve registros de empleado con casos JOBCODE para A01 y B01, como si hubiese utilizado AND.
En el ejemplo que sigue, para que se seleccione un registro, si campo de JOBCODE debe contar con valores de A01 y B01:
WHERE JOBCODE INCLUDES A01 AND B01
Si falta alguno, no se selecciona el registro para el informe.
Si el criterio de selección es
WHERE JOBCODE EXCLUDES A01 AND B01
se selecciona para el informe cada registro que no tenga ambos valores.
En el origen de datos CAR, sólo Inglaterra produce Jaguar y Jensen, por lo que la solicitud
TABLE FILE CAR PRINT COUNTRY WHERE CAR INCLUDES JAGUAR AND JENSEN END
genera este resultado:
COUNTRY ------- ENGLAND
WebFOCUS |