En esta sección: Referencia: |
Se han definido varios tipos de datos nuevos para que SQL Translator admita campos de fecha y hora en el predicado WHERE o en la lista de campos de una declaración SELECT.
Además, se pueden definir las columnas de hora o de marca de hora en orígenes de datos relacionales o de FOCUS que resultan accesibles para el traductor. Los valores se pueden suministrar con declaraciones INSERT y UPDATE y se pueden mostrar en declaraciones SELECT.
Los elementos de datos de hora o de marca de hora (columnas o literales) se pueden comparar en condiciones. Los valores de tiempo y marca de hora pueden añadirse y sustraerse unos de otros, produciendo como resultado la diferencia en número de segundos. Se permiten expresiones del tipo T + 2 HOURS o TS + 5 YEARS. Estas expresiones se traducen en llamadas a las funciones de fecha y hora descritas en el manual Cómo usar las funciones .
Todos los formatos de fecha para campos virtuales o reales en el archivo máster se convierten al formato YYYYMMDD. Si especifica un formato que no cuenta con uno de estos componentes, SQL Translator proporcionar un valor predeterminado para el componente no disponible. Para especificar una parte de una fecha, como el mes, utilice un campo virtual con un formato alfanumérico.
En el gráfico siguiente, fff representa el segundo de tres lugares decimales (milisegundos) y ffffff representa el segundo de seis lugares decimales (microsegundos).
Se admiten los siguientes formatos como entrada al traductor:
Formato |
Atributo USAGE en el archivo máster |
Componentes de fecha |
---|---|---|
Fecha |
YYMD |
YYYY-MM-DD |
Hora |
HH |
HH |
Horas por minutos |
HHI |
HH.MM |
Horas por segundos |
HHIS |
HH.MM.SS |
Horas por milisegundos |
HHISs |
HH.MM.SS.fff |
Horas por microsegundos |
HHISsm |
HH.MM.SS.ffffff |
Años por horas |
HYYMDH |
YYYY-MM-DD HH |
Años por minutos |
HYYMDI |
YYYY-MM-DD HH.MM |
Años por segundos |
HYYMDS |
YYYY-MM-DD HH.MM.SS |
Años por milisegundos |
HYYMDs |
YYYY-MM-DD HH.MM.SS.fff |
Años por microsegundos |
HYYMDm |
YYYY-MM-DD HH.MM.SS.ffffff |
Nota:
Cómo: |
SQL Translator admite varias funciones que devuelven componentes de valores de fecha y hora. Utilice la declaración EXTRACT para extraer componentes.
Utilice la función TRIM para eliminar patrones de valores de fecha, hora y de marca de hora adelantados o rezagados. Consulte el manual Cómo usar las funciones .
Las siguientes funciones devuelven componentes de fecha y hora como valores de números enteros. Supongamos que x es un valor de fecha y hora:
Función |
Valor de devolución |
---|---|
YEAR(x) |
año |
MONTH(x) |
mes (número) |
DAY(x) |
día (número) |
HOUR(x) |
hora |
MINUTE(x) |
minuto |
SECOND(x) |
segundo |
MILLISECOND(x) |
milisegundo |
MICROSECOND(x) |
microsegundo |
Con la columna de marca de hora TS cuyo valor es '1999-11-23 07:32:16.123456':
YEAR(TS) = 1999 MONTH(TS) = 11 DAY(TS) = 23 HOUR(TS) = 7 MINUTE(TS) = 32 SECOND(TS) = 16 MILLISECOND(TS) = 123 MICROSECOND(TS) = 123456
Supongamos que un origen de datos de FOCUS llamado VIDEOTR2 incluye un campo de fecha y hora llamado TRANSDATE.
SQL SELECT TRANSDATE, YEAR(TRANSDATE), MONTH(TRANSDATE), MINUTE(TRANSDATE) FROM VIDEOTR2; FILE VIDSQL END
SQL Translator produce los siguientes campos virtuales para funciones seguidos de una solicitud TABLE para mostrar la salida:
SET COUNTWIDTH=ON -SET SQLERRNUM = 0; DEFINE FILE VIDEOTR2 TEMP SQLDEF01/I4 MISSING ON NEEDS ALL = HPART(TRANSDATE,'YEAR','I4'); SQLDEF02/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MONTH','I2'); SQLDEF03/I2 MISSING ON NEEDS ALL = HPART(TRANSDATE,'MINUTE','I2'); END TABLEF FILE VIDEOTR2 PRINT TRANSDATE SQLDEF01 AS 'SQLDEF01' SQLDEF02 AS 'SQLDEF02' SQLDEF03 AS 'SQLDEF03' ON TABLE SET CARTESIAN ON ON TABLE SET ASNAMES ON ON TABLE SET HOLDLIST PRINTONLY END
La salida es:
TRANSDATE SQLDEF02 SQLDEF04 SQLDEF05 1999/06/20 04:14 1999 6 14 1991/06/27 02:45 1991 6 45 1996/06/21 01:16 1996 6 16 1991/06/21 07:11 1991 6 11 1991/06/20 05:15 1991 6 15 1999/06/26 12:34 1999 6 34 1919/06/26 05:45 1919 6 45 1991/06/21 01:10 1991 6 10 1991/06/19 07:18 1991 6 18 1991/06/19 04:11 1991 6 11 1998/10/03 02:41 1998 10 41 1991/06/25 01:19 1991 6 19 1986/02/05 03:30 1986 2 30 1991/06/24 04:43 1991 6 43 1991/06/24 02:08 1991 6 8 1999/10/06 02:51 1999 10 51 1991/06/25 01:17 1991 6 17
Utilice la siguiente función ANSI estándar para extraer componentes de fecha y hora como valores de número enteros:
EXTRACT(component FROM value)
donde:
Es uno de los siguientes: YEAR, MONTH, QUARTER, DAY, WEEKDAY, HOUR, MINUTE, SECOND, MILLISECOND o MICROSECOND.
Es una expresión o constante de campo de fecha y hora o DATE, TIME o TIMESTAMP
Los siguientes, por ejemplo, son equivalentes:
EXTRACT(YEAR FROM TS) YEAR(TS)
SELECT D. EXTRACT(YEAR FROM D), EXTRACT(MONTH FROM D), EXTRACT(DAY FROM D) FROM T
Esta solicitud produce filas parecidas a las siguientes:
1999-01-01 1999 1 1 2000-03-03 2000 3 3
WebFOCUS |