Una expresión de fecha realiza un cálculo numérico con fechas.
Una expresión de fecha genera una fecha, un componente de fecha o un número entero que representa el número de días, meses, trimestres o años entre dos fechas. Puede escribir una expresión de fecha directamente que conste de:
COMPUTE END_DATE/MDYY = 'FEB 29 2000';
La constante de fecha debe estar entre comillas simples.
COMPUTE NEWDATE/YMD = START_DATE;
COMPUTE OLDDATE/I6YMD = 980307; COMPUTE NEWDATE/YMD DFC 19 YRT 10 = OLDDATE;
COMPUTE CONVERTED_HDT/YMD = HIRE_DATE; HIRE_DATE_PLUS_THIRTY/YMD = CONVERTED_HDT + 30;
COMPUTE DIFF/I4 = YMD (HIRE_DATE,FST.DAT_INC);
Referencia: |
Puede trabajar con fechas en una de estas dos maneras:
Cuando se muestra, el valor entero se convierte en la fecha correspondiente en el formato especificado para el campo. El formato puede ser especificado tanto en el archivo máster como en el comando que use una expresión para asignar un valor al campo. Estos eran conocidos como campos formateados de fecha inteligente.
Puede convertir una fecha con un formato en una fecha con otro formato con sólo asignar un formato al otro. Por ejemplo, las siguientes asignaciones toman una fecha almacenada como campo alfanumérico y formateada con opciones de edición de fecha y la convierten en una fecha almacenada como un campo de fecha temporal:
COMPUTE ALPHADATE/A6MDY = '120599' ; REALDATE/MDY = ALPHADATE;
La siguiente tabla muestra la fecha base para cada formato de fecha admitido:
Formato |
Fecha base |
---|---|
YMD, YYMD, MDYY, DMYY, MDY, and DMY |
1900/12/31 |
YM, YYM, MYY, and MY |
1901/01 en z/OS 1900/12/31 en Windows y UNIX |
YQ, YYQ, QYY, and QY |
1901 Q1 |
JUL and YYJUL |
1900/365 |
D M Y, YY Q W |
No hay fecha base para estos formatos. Se trata sólo de números, no de fechas. |
Fíjese que la fecha base que se utiliza para las funciones DA y DT es el 31 de diciembre de 1899. Para detalles acerca de las funciones de fecha, consulte el manual Cómo usar las funciones .
La siguiente tabla explica cómo el formato de campo afecta el almacenamiento y la visualización:
Formato de fecha (por ejemplo: MDYY) |
Formato de número entero, empaquetado, decimal o alfanumérico (por ejemplo: A8MDYY) | |||
---|---|---|---|---|
Valor |
Almacenado |
Mostrado |
Almacenado |
Mostrado |
28 de febrero de 1999 |
35853 |
02/28/1999 |
02281999 |
02/28/1999 |
1 de marzo de 1999 |
35854 |
03/01/1999 |
03011999 |
03/01/1999 |
El formato de un campo determina cómo puede utilizarlo en una expresión de fecha. Los cálculos con fechas en formato de fecha puede incorporar operadores numéricos así como funciones numéricas. Los cálculos de fechas en formato de número entero, empaquetado, decimal o alfanumérico requieren el uso de funciones de fecha. Los operadores numéricos generan un mensaje de error o un resultado incorrecto.
Su software incluye un completo conjunto de funciones que permiten la manipulación de fechas en formato de número entero, de decimal empaquetado y alfanumérico. Para más detalles acerca de las funciones de fecha, consulte el manual Cómo usar las funciones .
Imaginemos que su empresa mantiene una base de datos SHIPPING. El siguiente ejemplo calcula cuántos días toma el departamento de embarque para completar una orden, restándole la fecha en que se ordena un artículo (ORDER_DATE) a la fecha en que se embarca (SHIPDATE):
COMPUTE TURNAROUND/I4 = SHIP_DATE - ORDER_DATE;
En el caso de un artículo ordenado el 28 de febrero de 1999 y embarcado el 1 de marzo, la diferencia es de un día. Sin embargo, si los campos SHIP_DATE y ORDER_DATE tienen formato de número entero, el resultado del cálculo (730000) es incorrecto, pues no se puede utilizar un operador numérico menos (-) con ese formato.
La siguiente tabla muestra cómo el formato de campo afecta el resultado:
Valor en formato de fecha | Valor en formato de número entero | |
---|---|---|
SHIP_DATE = March 1, 1999 | 35854 | 03011999 |
ORDER_DATE = February 28, 1999 | 35853 | 02281999 |
TURNAROUND | 1 | 730000 |
Para obtener el resultado correcto con campos en formato de número entero, empaquetado, decimal o alfanumérico, utilice la función de fecha MDY, que genera la diferencia entre dos fechas en formato mes-día-año. Puede calcular TURNAROUND con la función MDY de la manera siguiente:
COMPUTE TURNAROUND/I4 = MDY(ORDER_DATE, SHIP_DATE);
En un comando DEFINE o COMPUTE o en un atributo DEFINE en un archivo máster, puede usar una expresión que implemente la técnica de la ventana corrediza para procesar fechas de dos siglos diferentes. Los parámetros DEFCENT y YRTHRESH proporcionan un medio de interpretar el siglo si no se ofrecen los primeros dos dígitos del año en otra parte. Si se proveen los primeros dos dígitos, se aceptan.
Para obtener información detallada acerca de la técnica de la ventana corrediza y el uso de expresiones en esta técnica, vaya a Cómo trabajar con fechas de dos siglos diferentes en la sección de Documentación adicional del CD de manuales de WebFOCUS.
Una expresión de fecha siempre genera un número. Ese número puede representar una fecha o un número de días, meses, trimestres o años entre dos fechas. Si utiliza una expresión de fecha para asignar un valor a un campo, el formato seleccionado para el campo determina cómo se generan los resultados.
Considere los comandos siguientes, como si SHIP_DATE y ORDER_DATE fuesen campo de fecha formateada. El primer comando calcula los días que tarda el departamento de envíos en completar un pedido restando la fecha en la que se hizo el pedido, ORDER_DATE, de la fecha en la que se envió el pedido, SHIP_DATE. El segundo comando calcula una fecha de envío añadiendo cinco días a la fecha de envío del pedido.
COMPUTE TURNAROUND/I4 = SHIP_DATE - ORDER_DATE; COMPUTE DELIVERY/MDY = SHIP_DATE + 5;
En el primer comando, la expresión de fecha devuelve el número de días que se tarda en completar un pedido, por lo que el campo asociado, TURNAROUND, debe estar en formato de número entero. En el segundo comando, la expresión de fecha devuelve la fecha en que se se entregará el artículo, por lo que el campo asociado, DELIVERY, debe estar en formato de fecha.
Al usar una constante de fecha en un cálculo, con un campo en formato de fecha, debe ponerla entre comillas simples, de lo contrario, se interpretará como el número de días entre la constante y la fecha base (el 31 de diciembre de 1900 o el 1 de enero de 1901). Por ejemplo, si 022899 no estuviera entre comillas, el valor se interpretaría como el día 22,899 después del 31 de diciembre de 1900, no como el 28 de febrero de 1999.
El siguiente comando inicializa START_DATE con la constante de fecha 02/28/99:
COMPUTE START_DATE/MDY = '022899';
El siguiente comando calcula los días que han pasado desde el 1 de enero de 1999.
COMPUTE YEAR_TO_DATE/I4 = CURR_DATE - 'JAN 1 1999' ;
Los componentes de fecha incluyen días, meses, trimestres y años. Puede escribir una expresión que extraiga un componente desde un campo en formato de fecha. Sin embargo, no puede escribir una expresión que extraiga días, meses o trimestres de una fecha que no tenga estos componentes. Por ejemplo, no puede extraer un mes de una fecha en formato YY, que representa sólo los años.
El siguiente ejemplo extrae el componente de mes de SHIP_DATE, que tiene el formato MDYY:
COMPUTE SHIP_MONTH/M = SHIP_DATE;
Si SHIP_DATE tiene el valor 1 de marzo de 1999, la expresión de arriba genera el valor 03 para SHIP_MONTH.
Un cálculo en un componente de fecha produce automáticamente un valor válido para el componente deseado. Por ejemplo, si el valor actual de SHIP_MONTH es 03, la siguiente expresión genera correctamente el valor 06:
COMPUTE ADD_THREE/M = SHIPMONTH + 3;
Si el resultado de la suma de los meses es mayor de 12, se ajustan los meses correctamente (por ejemplo, 11 + 3 es 2, no 14).
Cuando utilice campos con formatos de fecha, puede combinar campos con un orden de componentes diferente en la misma expresión. Además, puede asignar el resultado de una expresión de fecha a un campo con un orden de componentes diferente de los campos en la expresión.
Sin embargo, no puede escribir una expresión que combine fechas en formato de fecha con fechas en formato de número entero, empaquetado, decimal o de caractéres.
Examine los dos campos DATE_PAID y DUE_DATE. DATE_PAID tiene el formato YYMD, mientras que DUE_DATE tiene el formato MDY. Puede combinar estos dos campos en una expresión para calcular el número de días de atraso de un pago:
COMPUTE DAYS_LATE/I4 = DATE_PAID - DUE_DATE;
Examine el campo DATE_SOLD. Este campo contiene la fecha en que se vende un artículo, en formato YYMD. La siguiente expresión le suma siete días a DATE_SOLD para determinar la última fecha en que el artículo se puede devolver. Luego asigna el resultado a un campo con formato DMY:
COMPUTE RETURN_BY/DMY = DATE_SOLD + 7;
WebFOCUS |