En esta sección: |
Las funciones descritas en esta sección operan con campos en el formato fecha-hora (también llamado formato H).
En esta sección: |
El parámetro DATEFORMAT especifica el orden de los componentes de fecha de algunos tipos de valores de fecha-hora. El parámetro WEEKFIRST especifica el primer día de la semana. El parámetro DTSTRICT determina hasta qué punto se comprueba la validez de los valores de fecha-hora.
El parámetro DATEFORMAT especifica el orden de los componentes de fecha (mes/día/año), cuando los valores de fecha-hora se introducen en la cadena formateada y en formatos de cadenas traducidas, descritos en Cómo usar los formatos de fecha-hora. Hace que el formato de entrada de un valor se mantenga independiente con respecto al formato de la variable a que se está asignando.
SET DATEFORMAT = option
donde:
Puede ser uno de los siguientes: MDY, DMY, YMD o MYD. MDY es el valor predeterminado del formato U.S. English.
La siguiente solicitud emplea un literal de fecha natural, con componentes ambiguos de día y mes numéricos (APR 04 05) como entrada de la función HINPUT:
SET DATEFORMAT = MYD DEFINE FILE EMPLOYEE DTFLDYYMD/HYYMDI = HINPUT(9,'APR 04 05', 8, DTFLDYYMD); END TABLE FILE EMPLOYEE SUM CURR_SAL NOPRINT DTFLDYYMD END
Con DATEFORMAT establecido en MYD, el valor se interpreta como Abril 5, 1904:
DTFLDYYMD --------- 1904-04-05 00:00
El parámetro WEEKFIRST especifica un día de la semana como principio de la semana. Esto se usa en los cálculos de semanas realizados por las funciones HADD, HDIFF, HNAME, HPART y HYYWD. Además, lo utilizan las funciones DTADD, DTDIFF, DTRUNC, y DTPART. Los valores por defecto son distintos para esas funciones, como se explica en Cómo Establecer un día como inicio de la semana. El parámetro WEEKFIRST no cambia el día del mes correspondiente a cada día de la semana, sino que especifica el día considerado como el inicio de la semana.
Las subrutinas HPART, DTPART, HYYWD y HNAME pueden extraer un número de semana a partir de un valor de fecha-hora. Para determinar el número de la semana, son capaces de utilizar definiciones diferentes. Por ejemplo, la numeración estándar de semanas ISO 8601, define la primera semana del año como la primera semana de enero de cuatro o más días. Cualquier día previo de Enero pertenecerá a la semana 52 o 53 del año anterior. El estándar ISO también establece el lunes como primer día de la semana.
Puede especificar el tipo de numeración de semanas estableciendo el parámetro WEEKFIRST, como se explica en Cómo Establecer un día como inicio de la semana.
Puesto que el número de semana devuelto por las funciones HNAME, DTPART y HPART puede estar en el año actual, anterior o posterior, puede que no resulte muy útil. La función HYYWD devuelve el año y la semana de un valor de fecha-hora determinado.
SET WEEKFIRST = value
donde:
Puede ser:
La numeración de semanas que utiliza estos valores establece la primera semana de enero con siete días como el número de semana 1. Los días previos de Enero pertenecen a la última semana del año anterior. Todas las semanas tienen siete días.
Nota: ISO es un sinónimo de ISO2.
La numeración de semanas que utiliza estos valores establece la primera semana de enero con un mínimo de cuatro días como el número de semana 1. Los días previos de Enero pertenecen a la última semana del año anterior. Todas las semanas tienen siete días.
Nota: STD sin dígito equivale a STD1.
A continuación le mostramos la numeración de semanas que utiliza estos valores. El número de semana 1 comienza el 1 de enero y finaliza el día anterior al primer día de la semana. Por ejemplo, para STD1, la primera semana termina el primer sábado del año. La primera y la última semana pueden tener menos de siete días.
Lo siguiente designa el domingo como inicio de la semana, utilizando la numeración de semanas no estándar:
SET WEEKFIRST = 1
El procesamiento estricto comprueba los valores de fecha-hora cuando han sido introducidos por un usuario final, leídos desde un archivo de transacciones, mostrados o devueltos por una subrutina, para garantizar que representan una fecha y hora válidas. Por ejemplo, un mes numérico debe ser de entre 1 y 12. El día debe estar dentro del número de días del mes especificado.
SET DTSTRICT = {ON|OFF}
donde:
Invoca el procesamiento estricto. ON es el valor predeterminado.
El procesamiento estricto comprueba los valores de fecha-hora cuando han sido introducidos por un usuario final, leídos desde un archivo de transacciones, mostrados o devueltos por una subrutina, para garantizar que representan una fecha y hora válidas. Por ejemplo, un mes numérico debe ser de entre 1 y 12. El día debe estar dentro del número de días del mes especificado.
Si DTSTRICT se encuentra en ON y el resultado fuese un valor de fecha-hora no válido, la función devuelve el valor cero (0).
No invoca el procesamiento estricto. Los componentes de fecha-hora pueden tener cualquier valor, dentro de los límites del número de dígitos decimales permitido en el campo. Por ejemplo, si el campo es un mes de dos dígitos, el valor puede ser 12 o 99, pero no 115.
Referencia: |
Las funciones de fecha-hora pueden operar con un componente de un valor de fecha-hora. Este tema lista los nombres y abreviaciones válidos de los nombres de componentes, para su uso con estas funciones.
Los siguientes nombres de componentes, abreviaciones válidas y valores son compatibles como argumentos para las funciones de fecha-hora que los requieran:
Nombre de componente |
Abreviación |
Valores válidos |
---|---|---|
year |
yy |
0001-9999 |
quarter |
|
1-4 |
month |
mm |
1-12 o el nombre de un mes, dependiendo de la función. |
day-of-year |
dy |
1-366 |
day or day-of-month |
dd |
1-31 (Ambos nombres de componente son equivalentes.) |
week |
wk |
1-53 |
weekday |
dw |
1-7 (Domingo-Sábado) |
hour |
hh |
0-23 |
minute |
mi |
0-59 |
second |
ss |
0-59 |
millisecond |
ms |
0-999 |
microsecond |
mc |
0-999999 |
nanosecond |
ns |
0-999999999 |
Nota:
En esta sección: |
Existen tres tipos de formatos de fecha válidos para los valores de fecha-hora: formato de cadena numérica, formato de cadena formateada y formato de cadena traducida. En cada formato, los años de dos dígitos se interpretan utilizando los parámetros DEFCENT y YRTHRESH.
Los componentes de hora están separados por dos puntos y pueden venir seguidos de A.M., P.M., a.m. o p.m.
El parámetro DATEFORMAT especifica el orden de los componentes de las fechas (mes/día/año), cuando los valores de fecha-hora se introducen en la cadena formateada y formatos de cadenas traducidas. Hace que el formato de entrada de un valor se mantenga independiente con respecto al formato de la variable a que se está asignando.
El formato de cadena numérica está compuesto exactamente por cuatro, seis u ocho dígitos. Las cadenas de cuatro dígitos se consideran un año (debe especificar el siglo) y el mes y día corresponden a 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 dos para el día. Dado que el orden de los componentes es fijo en este formato, se ignora la propiedad DATEFORMAT.
Si se encuentra con un formato de cadena numérica superior a ocho dígitos, se trata como si fuese una cadena combinada de fecha-hora, en formato Hnn.
Los ejemplos que siguen son constantes de cadenas numéricas de fechas:
Cadena |
Fecha |
---|---|
99 |
Enero 1, 1999 |
1999 |
Enero 1, 1999 |
19990201 |
1 de febrero de 1999 |
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 un espacio, barra diagonal, guión o punto. Estos tres componentes deben estar presentes y respetar la propiedad DATEFORMAT. 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, le mostramos ejemplos de constantes de fechas de cadena formateada que especifican mayo 20, 1999:
1999/05/20 5 20 1999 99.05.20 1999-05-20
El formato de cadena traducida contiene el nombre del mes, completo o abreviado. 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.
La siguiente fecha está en el formato de cadena traducida:
January 6 2000
Los componentes de hora están separados por dos puntos y pueden venir seguidos de A.M., P.M., a.m. o p.m.
Puede expresar los segundos con un punto decimal o seguidos de dos puntos. Si los segundos vienen seguidos de dos puntos, el próximo valor representa los milisegundos. No existe otra forma de expresar los microsegundos y nanosegundos con esta notación.
El punto decimal en el segundo valor indica la fracción decimal de un segundo. Puede representar los microsegundos con seis dígitos decimales. Los nanosegundos pueden representarse utilizando nueve dígitos decimales.
Los siguientes ejemplos muestran formatos de hora aceptables:
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
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 -.
Cómo: |
Un valor de fecha-hora es una constante en formato de caracteres, seguida por uno de estos elementos:
Las constantes de fecha-hora pueden tener espacios en blanco al principio, al final o justo antes de un indicador de am/pm.
En un archivo de caracteres
date_string [time_string]
o
time_string [date_string]
En una expresión COMPUTE, DEFINE o WHERE
DT(date_string [time_string])
o
DT(time_string [date_string])
En una expresión IF
'date_string [time_string]'
o
'time_string [date_string]'
donde:
Es una cadena de hora en un formato aceptable. Las cadenas de hora pueden tener un espacio en blanco justo antes de un indicador am/pm.
Es una cadena de fecha en formato numérico, formateado o traducido.
En los criterios IF, si el valor no contiene espacios en blanco ni caracteres especiales, no es necesario el uso de comillas simples.
Nota: Las cadenas de fecha y hora deben estar separadas por un espacio en blanco, como mínimo. También se permiten espacios en blanco al principio y al final de la cadena de fecha y 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);
El siguiente ejemplo usa la función DT en un comando COMPUTE, para crear un campo nuevo que contenga un valor de fecha-hora asignado.
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
El siguiente ejemplo usa la función DT para crear un campo nuevo que contenga un valor de fecha-hora asignado. A continuación, el valor se utiliza como un criterio WHERE.
DEFINE FILE EMPLOYEE NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL); RAISETIME/HYYMDIA = DT(20000101 09:00AM); END
TABLE FILE EMPLOYEE PRINT LAST_NAME FIRST_NAME NEWSAL RAISETIME WHERE RAISETIME EQ DT(20000101 09:00AM) END
La salida es:
LAST_NAME FIRST_NAME NEWSAL RAISETIME --------- ---------- ------ --------- STEVENS ALFRED $12,100.00 2000/01/01 9:00AM SMITH MARY $14,520.00 2000/01/01 9:00AM JONES DIANE $20,328.00 2000/01/01 9:00AM SMITH RICHARD $10,450.00 2000/01/01 9:00AM BANNING JOHN $32,670.00 2000/01/01 9:00AM IRVING JOAN $29,548.20 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 GREENSPAN MARY $9,900.00 2000/01/01 9:00AM CROSS BARBARA $29,768.20 2000/01/01 9:00AM
El siguiente ejemplo usa la función DT para crear un campo nuevo que contenga un valor de fecha-hora asignado. A continuación, el valor se utiliza como un criterio IF.
DEFINE FILE EMPLOYEE NEWSAL/D12.2M = CURR_SAL + (0.1 * CURR_SAL); RAISETIME/HYYMDIA = DT(20000101 09:00AM); END TABLE FILE EMPLOYEE PRINT LAST_NAME FIRST_NAME NEWSAL RAISETIME IF RAISETIME EQ '20000101 09:00AM' END
La salida es:
LAST_NAME FIRST_NAME NEWSAL RAISETIME --------- ---------- ------ --------- STEVENS ALFRED $12,100.00 2000/01/01 9:00AM SMITH MARY $14,520.00 2000/01/01 9:00AM JONES DIANE $20,328.00 2000/01/01 9:00AM SMITH RICHARD $10,450.00 2000/01/01 9:00AM BANNING JOHN $32,670.00 2000/01/01 9:00AM IRVING JOAN $29,548.20 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 GREENSPAN MARY $9,900.00 2000/01/01 9:00AM CROSS BARBARA $29,768.20 2000/01/01 9:00AM
WebFOCUS |