Valores de fecha y hora
Los tipos de datos de fecha y hora son DATE, TIME y TIMESTAMP. Aunque los valores de fecha y hora se pueden utilizar en determinadas operaciones aritméticas y de serie y son compatibles con determinadas series, no son series ni números.
Fecha
- El rango de la parte del mes es de 1 a 12.
- El rango de la parte de día es de 1 a x, donde x es 28, 29, 30 o 31, y depende del mes.
- El rango de la parte de año es de 0001 a 9999 para las tablas locales.
La representación interna de una fecha es una serie de 4 bytes. Cada byte consta de 2 dígitos decimales empaquetados. Los 2 primeros bytes representan el año, el tercer byte el mes y el último byte el día.
La longitud de una columna DATE, tal como se describe en el SQLDA, es de 10 bytes, que es la longitud adecuada para una representación en forma de serie de caracteres del valor.
Hora
- El rango de la parte de hora es de 0 a 24.
- El rango de las partes de minuto y segundo es de 0 a 59.
La representación interna de la hora es una serie de 3 bytes. Cada byte consta de 2 dígitos decimales empaquetados. El primer byte representa la hora, el segundo byte el minuto y el último byte el segundo.
La longitud de la columna TIME, tal como se describe en SQLDA, es de 8 bytes, que es la longitud adecuada para una representación en forma de serie de caracteres del valor.
Indicación de fecha y hora
La representación interna de una indicación de fecha y hora es una serie de 7 - 13 bytes. Cada byte consta de 2 dígitos decimales empaquetados. Los 4 primeros bytes representan la fecha, los 3 bytes siguientes la hora, y los últimos 0 - 6 bytes las fracciones de un segundo.
La longitud de la columna TIMESTAMP, tal como se describe en SQLDA, es de 19 - 32 bytes, que es la longitud adecuada para una representación en forma de serie de caracteres del valor.
Representación mediante series de los valores de fecha y hora
Los valores cuyos tipos de datos son DATE, TIME o TIMESTAMP se representan en un formato interno que es transparente para el usuario. Sin embargo, los valores de fecha, hora e indicación de fecha y hora también pueden representarse mediante series. Esto resulta útil porque no existen constantes ni variables cuyo tipo de datos sean DATE, TIME o TIMESTAMP. Antes de poder recuperar un valor de fecha y hora, éste debe asignarse a una variable de serie. La función GRAPHIC (sólo para bases de datos Unicode) puede utilizarse para cambiar el valor de fecha y hora a una representación de serie. Normalmente, la representación de serie es el formato por omisión de los valores de fecha y hora asociados con el código territorial de la aplicación, a menos que se alteren temporalmente por la especificación de la opción DATETIME al precompilar el programa o vincularlo con la base de datos.
Independientemente de la longitud, no se puede utilizar una serie de gran objeto como representación en forma de serie de un valor de fecha y hora (SQLSTATE 42884).
Cuando se utiliza una representación de serie válida de un valor de fecha y hora en una operación con un valor de fecha y hora interno, la representación de serie se convierte al formato interno del valor de fecha, hora o indicación de fecha y hora antes de realizar la operación.
Las series de fecha, hora e indicación de fecha y hora sólo deben contener caracteres y dígitos.
Series de fecha
| Nombre del formato | Abreviatura | Formato de fecha | Ejemplo |
|---|---|---|---|
| International Standards Organization (con separadores) | ISO | aaaa-MM-dd | '2018-10-27' |
| International Standards Organization (sin separadores)1 | - | aaaaMMdd | '20181027' |
| Estándar IBM® USA | USA | MM/dd/aaaa | '10/27/2018' |
| Estándar IBM European | EUR | dd.MM.aaaa | '27.10.2018' |
| Era Japanese Industrial Standard Christian | JIS | aaaa-MM-dd | '2018-10-27' |
| Netezza1 | - | dd-MES-aa | '12-FEB-16' |
| Definido-sitio | LOC | Depende del código territorial de la aplicación | - |
| 1 Este formato se puede utilizar solo para valores de entrada, no para valores de salida ni constantes. | |||
- Se pueden incluir espacios en blanco al final.
- Se pueden omitir los ceros iniciales de las partes de mes y día.
Series de hora
| Nombre del formato | Abreviatura | Formato de la hora | Ejemplo |
|---|---|---|---|
| International Standards Organization | ISO | hh.mm o hh.mm.ss | '13.30.05' |
| Estándar IBM USA | USA | hh o hh:mm AM o PM | '1:30 PM' |
| Estándar IBM European | EUR | hh.mm o hh.mm.ss | '13.30.05' |
| Era Japanese Industrial Standard Christian | JIS | hh:mm o hh:mm:ss | '13:30:05' |
| Definido-sitio | LOC | Depende del código territorial de la aplicación | - |
- Se pueden incluir espacios en blanco al final.
- Se puede omitir un cero a la izquierda de la hora
- Los segundos se pueden omitir, en cuyo caso se da por sentado una especificación implícita de 0 segundos (por ejemplo, 13:30 es equivalente a 13:30:00).
- La organización International Standards Organization ha cambiado el formato de la hora, de modo que ahora es idéntico al de Japanese Industrial Standard Christian Era. Por lo tanto, utilice el formato JIS si una aplicación necesita el formato actual de International Standards Organization.
- En el formato de EE. UU.:
- Los minutos se pueden omitir, en cuyo caso se da por sentado una especificación implícita de 00 minutos (por ejemplo, 1 PM es equivalente a 1:00 PM).
- La hora no debe ser mayor que 12 y no puede ser 0, excepto en el caso especial de 00:00 AM.
- Solo hay un espacio antes de 'AM' o 'PM'.
- 'AM' o 'PM' se puede representar en mayúsculas o en minúsculas.
- La tabla siguiente muestra cómo se corresponde el formato de EE. UU. con el formato JIS:
Formato de EE. UU. Formato JIS De 12:01 AM a 12:59 AM De 00:01:00 a 00:59:00 De 01:00 AM a 11:59 AM De 01:00:00 a 11:59:00 De 12:00 PM (mediodía) a 11:59 PM De 12:00:00 a 23:59:00 12:00 AM (medianoche) 24:00:00 00:00 AM (medianoche) 00:00:00
Series de indicación de fecha y hora
| Nombre del formato | Formato de indicación de fecha y hora | Ejemplo |
|---|---|---|
| Interno (segundos completos) | aaaa-MM-dd-hh.mm.ss | '2018-03-22-12.00.00' |
| Interno (fracciones de segundo) | aaaa-MM-dd-hh.mm.ss.SSSSSSSSSSSS | '2018-03-22-12.00.00.000000000005' |
| ODBC (segundos completos)1 | aaaa-MM-dd hh:mm:ss | '2018-03-22 08:30:58' |
| ODBC (fracciones de segundo)1 | aaaa-MM-dd hh:mm:ss.SSSSSSSSSSSS | '2018-03-22 08:30:58.000000000005' |
| Netezza1 | aaaaMMdd hh:mm:ss AM o PM | '20180101 12:00:59 PM' |
| Sin delimitadores | aaaaMMddhhmmss | '20180322120000' |
| Sin delimitadores (fracciones de segundo) | aaaaMMddhhmmssSSSSSSSSSSSS | '20180322120000123456123456' |
| 1 Este formato se puede utilizar solo para valores de entrada, no para valores de salida ni constantes. Las partes de fecha y hora de la indicación de fecha y hora se muestran aquí como separadas por un espacio en blanco. También se pueden separar por un guión o la letra T. Por ejemplo, '2018-03-22 08:30:58.7', '2018-03-22-08:30:58.7' y '2018-03-22T08:30:58.7' son todos equivalentes. | ||
- Los segundos se pueden especificar en hasta 12 posiciones decimales.
- Los ceros finales se pueden truncar u omitir por completo de las fracciones de segundo,
- Los ceros iniciales se pueden omitir de la parte de mes, día y hora de la indicación de fecha y hora.
- Una serie de caracteres puede contener cualquier número de espacios en blanco al final.
- Si una representación de serie de una indicación de fecha y hora se convierte implícitamente a un valor con un tipo de datos TIMESTAMP, la precisión del resultado de la conversión se determina mediante la precisión del operando TIMESTAMP en una expresión o la precisión del destino TIMESTAMP en una asignación.
- Los dígitos de las fracciones de segundo que exceden la precisión de la conversión se truncan en la serie. Por ejemplo, si la serie '2018-3-2-8.30.00297' se convierte a TIMESTAMP(3), el resultado es 2018-03-02-08.30.00.002.
- Si la precisión de la conversión de tipo de datos excede la precisión de la serie, el resultado se rellena con ceros. Por ejemplo, si la serie '2018-3-2-8.30.07' se convierte a TIMESTAMP(12), el resultado es 2018-03-02-08.30.00.070000000000.
- Se puede dar una precisión de indicación de fecha y hora diferente a una representación de serie de una indicación de fecha y hora convirtiendo explícitamente el valor a una indicación de fecha y hora con una precisión especificada. Si la serie es una constante, una alternativa consiste en poner delante de la constante de serie la palabra clave TIMESTAMP. Por ejemplo, TIMESTAMP '2018-03-28 14:50:35.123' tiene el tipo de datos TIMESTAMP(3).