Cómo crear una expresión de fecha y hora

En esta sección:

Cómo:

Una expresión de fecha-hora devuelve componentes de fecha y de hora. Puede crear estas expresiones mediante una variedad de funciones de fecha y hora que se le proporcionan. Para más detalles sobre las funciones de fecha-hora, consulte el manual Cómo usar las funciones .


Principio de página

x
Sintaxis: Cómo Especificar el orden de los componentes de fecha en un campo de fecha-hora
SET DATEFORMAT = option

donde:

option
Puede ser uno de los siguientes: MDY, DMY, YMD o MYD. MDY es el valor predeterminado del formato U.S. English.

Para ver un ejemplo, consulte Especificar el orden de los componentes de fecha de un campo de fecha-hora.


Principio de página

x
Cómo especificar un valor de fecha y hora

Un valor externo de fecha y hora es una constante en formato de caracteres de uno de los siguientes orígenes:

Una constante de fecha-hora o un valor de fecha-hora como aparece en el archivo de caracteres tiene uno de los siguientes formatos:

time_string  [date_string] 
date_string  [time_string]

Una constante de fecha y hora en una expresión COMPUTE, DEFINE o WHERE deben tener uno de los formatos que siguen:

DT(time_string  [date_string])
DT(date_string  [time_string])

Una constante de fecha y hora en una expresión IF tiene uno de los formatos que siguen:

'time_string  [date_string]' 
'date_string  [time_string]'

Si el valor no contiene espacios en blanco o caracteres especiales, no se necesitan comillas simples. Tenga en cuenta que los criterios IF no admiten el prefijo DT.

donde:

time_string
No puede contener espacios en blanco. Los componentes temporales se separan con dos puntos y pueden preceder a AM, PM, am o pm. Por ejemplo:
14:30:20:99       (99 milliseconds)
14:30
14:30:20.99       (99/100 seconds)
14:30:20.999999   (999999 microseconds)
02:30:20:500pm

Fíjese que los segundos se pueden expresar con un punto decimal o bien pueden preceder a dos puntos:

  • Si se colocan dos puntos después de los segundos, el valor que sigue corresponde a los milisegundos. Esta notación no permite expresar microsegundos ni nanosegundos.
  • Un punto decimal en el segundo valor indica la fracción decimal de un segundo. Se puede representar un microsegundo con seis dígitos decimales. Los nanosegundos pueden representarse mediante dígitos de nueve decimales.
date_string
Puede adoptar uno de los tres formatos que siguen:
  • El formato de cadena numérica consta exactamente de cuatro, seis u ocho dígitos. Las cadenas de cuatro dígitos se consideran como un año (se debe especificar el siglo). El mes y día es Enero 1. Las cadenas de seis y ocho dígitos constan de dos o cuatro dígitos para el año, seguidos de dos para el mes y luego dos para el día. Puesto que el orden de los componentes está fijado en este formato, se ignora el ajuste DATEFORMAT, descrito en Cómo Especificar el orden de los componentes de fecha en un campo de fecha-hora.

    Si se encuentra un formato de cadena numérica mayor de ocho dígitos, se trata como una cadena combinada de fecha y hora en formato Hn. Los ejemplos que siguen son constantes de cadenas numéricas de fechas:

    99
    1999
    19990201
  • El formato de cadena formateada contiene un día de uno o dos dígitos, un mes de uno o dos dígitos y un año de dos o cuatro dígitos, separados por espacios, barras, guiones o puntos. Las tres partes deben estar presentes y seguir el ajuste DATEFORMAT, descrito en Cómo Especificar el orden de los componentes de fecha en un campo de fecha-hora. Si cualquiera de los tres campos consta de cuatro dígitos, se interpreta como un año y los otros dos campos deben seguir el orden asignado por la configuración DATEFORMAT. A continuación puede ver ejemplos de constantes de fecha de cadena formateada:
    1999/05/20
    5 20 1999
    99.05.20
    1999-05-20
  • El formato de cadena traducida contiene el nombre del mes abreviado o sin abreviar. Debe contener también el año en forma de cuatro o dos dígitos. Si falta el día, se asume de forma predeterminada el día 1 del mes; si está el día, puede contener uno o dos dígitos. Si la cadena contiene tanto un año de dos dígitos como un día de dos dígitos, estos deben seguir el orden asignado por la configuración DATEFORMAT. Por ejemplo:
    January 6 2000

Nota:



Ejemplo: Cómo asignar literales de fecha-hora

El prefijo DT puede usarse en una expresión COMPUTE, DEFINE o WHERE, para asignar un literal de fecha-hora a un campo fecha-hora. Por ejemplo:

DT2/HYYMDS = DT(20051226 05:45);
DT3/HYYMDS = DT(2005 DEC 26 05:45);
DT4/HYYMDS = DT(December 26 2005 05:45);


Ejemplo: Especificar el orden de los componentes de fecha de un campo de fecha-hora

La siguiente solicitud establece DATEFORMAT en MYD:

SET DATEFORMAT = MYD                    
DEFINE FILE EMPLOYEE                    
DTFLDYYMD/HYYMDI =  DT(APR 04 05);
END                                     
                                        
TABLE FILE EMPLOYEE                     
PRINT CURR_SAL DTFLDYYMD                
END

La salida indica que el literal de fecha natural, 'APR 04 05', se interpreta como Abril 5, 1904:

  CURR_SAL  DTFLDYYMD       
  --------  ---------       
$11,000.00  1904/04/05 00:00
$13,200.00  1904/04/05 00:00
$18,480.00  1904/04/05 00:00
 $9,500.00  1904/04/05 00:00
$29,700.00  1904/04/05 00:00
$26,862.00  1904/04/05 00:00
$21,120.00  1904/04/05 00:00
$18,480.00  1904/04/05 00:00
$21,780.00  1904/04/05 00:00
$16,100.00  1904/04/05 00:00
 $9,000.00  1904/04/05 00:00
$27,062.00  1904/04/05 00:00


Ejemplo: Cómo leer valores de fecha y hora desde un archivo de transacción

El archivo de transacción DTTRANS delimitado por coma tiene un campo Id. y un campo de fecha y hora que contiene tanto la fecha (en forma de ocho caracteres) como la hora (en formato hora:minutos:segundos):

01, 20000101 02:57:25,$
02, 19991231 14:05:35,$

Dado que el archivo de transacción contiene las fechas en formato de cadena numérica, no se usa la configuración DATEFORMAT y las fechas se introducen en orden YMD (año, mes, día).

El archivo de transacción que sigue es válido también. Contiene fechas en cadenas formateadas que cumplen con la configuración DATEFORMAT predeterminada, MDY (mes, día, año):

01, 01/01/2000 02:57:25,$
02, 12/31/1999 14:05:35,$

El siguiente archivo máster describe el origen de datos FOCUS llamado DATETIME, que recibe estos valores:

FILE=DATETIME,    SUFFIX=FOC   ,$
SEGNAME=DATETIME, SEGTYPE=S0   ,$
FIELD=ID,  ID,    USAGE = I2   ,$
FIELD=DT1, DT1,   USAGE=HYYMDS ,$


Ejemplo: Cómo utilizar un valor de fecha y hora en un comando COMPUTE
TABLE FILE EMPLOYEE
PRINT LAST_NAME FIRST_NAME AND COMPUTE
NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL);
RAISETIME/HYYMDIA = DT(20000101 09:00AM);
WHERE CURR_JOBCODE LIKE 'B%'
END

La salida es:

LAST_NAME        FIRST_NAME           NEWSAL  RAISETIME
---------        ----------           ------  ---------
SMITH            MARY             $14,520.00  2000/01/01  9:00AM
JONES            DIANE            $20,328.00  2000/01/01  9:00AM
ROMANS           ANTHONY          $23,232.00  2000/01/01  9:00AM
MCCOY            JOHN             $20,328.00  2000/01/01  9:00AM
BLACKWOOD        ROSEMARIE        $23,958.00  2000/01/01  9:00AM
MCKNIGHT         ROGER            $17,710.00  2000/01/01  9:00AM


Ejemplo: Cómo utilizar un valor de fecha y hora con criterios WHERE

En una expresión WHERE, una constante de fecha y hora debe usar el formato DT( ):

TABLE FILE VIDEOTR2
PRINT CUSTID TRANSDATE
WHERE TRANSDATE GT DT(2000/01/01 02:57:25)
END

La salida es:

CUSTID  TRANSDATE
------  ---------
1118    2000/06/26 05:45
1237    2000/02/05 03:30


Ejemplo: Cómo utilizar un valor de fecha y hora con criterios IF

En una cláusula IF, si la constante de fecha y hora contiene espacios en blanco, debe ir entre comillas simples,:

TABLE FILE VIDEOTR2
PRINT CUSTID TRANSDATE
IF TRANSDATE GT '2000/01/01 02:57:25'
END

Nota: Las cláusulas IF no admiten el prefijo DT para una constante de fecha y hora.

La salida es:

CUSTID  TRANSDATE
------  ---------
1118    2000/06/26 05:45
1237    2000/02/05 03:30


Ejemplo: Cómo especificar valores de entrada universales de fecha y hora

Con las configuraciones DTSTANDARD de STANDARD y STANDARDU, los siguientes valores de fecha y hora se pueden leer como entradas:

Valor de entrada

Descripción

14:30[:20,99]

Comas, no puntos, separan los componentes temporales

14:30[:20.99]Z

Hora universal

15:30[:20,99]+01
15:30[:20,99]+0100
15:30[:20,99]+01:00

Cada una de estas es igual que la de arriba en la hora Centroeuropea

09:30[:20.99]-05

Igual que la de arriba en la hora del Este (huso horario del Este de Estados Unidos)

Note que estos valores se almacenan interiormente de igual manera que la configuración STANDARDU. Con la configuración STANDARDU, se ignora todo lo que sigue a la Z, +, ó -.



x
Cómo manipular valores de fecha y hora

Las únicas operaciones directas que se pueden realizar en variables de fecha y hora y constantes son comparaciones mediante una expresión lógica o asignaciones simples, del tipo A=B.

Los cálculos sólo permiten asignaciones directas en los tipos de datos: alfa con alfa, numéricos con numéricos, fecha con fecha y fecha y hora con fecha y hora. Todas las demás expresiones se logran mediante un conjunto de funciones de fecha y hora.

Se pueden comparar dos valores de fecha y hora, aunque sus longitudes no coincidan.

Si un campo de fecha y hora admite valores no disponibles, los campos que contengan el valor no disponible tienen un valor mayor que el que pueda tener cualquier campo de fecha y hora. En consecuencia, para excluir valores no disponibles de la salida de informe al usar un operador GT o GE en una prueba de selección, se recomienda añadir el campo de restricción adicional, NE MISSING, a la prueba de selección:

date_time_field {GT|GE} date_time_value AND date_time_field NE MISSING

Se permiten asignaciones entre los formatos de fecha y hora de longitudes iguales o diferentes. La asignación de un valor de fecha y hora de 10 bytes a un valor de fecha y hora de 8 bytes trunca la parte correspondiente a los microsegundos (lo cual impide los redondeos). La asignación de un valor corto a uno largo establece en cero los tres dígitos de orden bajo de los microsegundos.

No se admiten otras operaciones, como la aritmética, la concatenación y EDIT y LIKE en operandos de fecha y hora. Se admiten los operadores de prefijo que funcionan con campos alfanuméricos.



Ejemplo: Cómo comprobar valores no disponibles de fecha y hora

Examine el archivo máster DATETIM2:

FILE=DATETIM2,  SUFFIX=FOC                ,$
SEGNAME=DATETIME, SEGTYPE=S0              ,$
FIELD=ID, ID, USAGE = I2                  ,$
FIELD=DT1, DT1,   USAGE=HYYMDS, MISSING=ON,$

El campo DT1 admite valores no disponibles. Examine la solicitud que sigue:

TABLE FILE DATETIM2
PRINT ID DT1
END

La siguiente salida de informe muestra que en la ocurrencia con ID=3, el campo DT1 es un valor no disponible:

ID  DT1
--  ---
 1  2000/01/01 02:57:25
 2  1999/12/31 00:00:00
 3  .

La siguiente solicitud selecciona valores de DT1 mayores de 2000/01/01 00:00:00 y que no faltan:

TABLE FILE DATETIM2
PRINT ID DT1
  WHERE DT1 NE MISSING AND DT1 GT DT(2000/01/01 00:00:00);
END

No se incluye el valor no disponible en la salida de informe:

ID  DT1
--  ---
 1  2000/01/01 02:57:25


Ejemplo: Cómo asignar un formato de uso distinto a una columna de fecha y hora

Examine la siguiente solicitud con el origen de datos VIDEOTR2:

TABLE FILE VIDEOTR2
 PRINT CUSTID TRANSDATE AND COMPUTE
  DT2/HYYMDH = TRANSDATE;
  T1/HHIS = TRANSDATE;
 WHERE DATE EQ 2000
 END

La salida es:

CUSTID  TRANSDATE         DT2            T1
------  ---------         ---            --
1118    2000/06/26 05:45  2000/06/26 05  05:45:00
1237    2000/02/05 03:30  2000/02/05 03  03:30:00

WebFOCUS