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 .
SET DATEFORMAT = option
donde:
Para ver un ejemplo, consulte Especificar el orden de los componentes de fecha de un campo de fecha-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:
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 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
1999/05/20 5 20 1999 99.05.20 1999-05-20
January 6 2000
Nota:
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);
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
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 ,$
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
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
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
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, +, o -.
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.
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
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 |