Representación mediante series de los valores de fecha y hora
Los valores de fecha, hora e indicación de fecha y hora también pueden representarse mediante series. Para muchos lenguajes de programación, no existen constantes SQL especiales para valores de fecha y hora y, excepto para Java™, no existen variables de programación con un tipo de datos de fecha, hora o marca de tiempo. Así, para poder recuperarlos, se debe asignar un valor de fecha y hora a una variable de tipo serie.
Los valores cuyos tipos de datos son DATE, TIME, TIMESTAMP SIN ZONA HORARIA o TIMESTAMP CON ZONA HORARIA se representan de forma transparente para el usuario de SQL. Las fechas, horas y marcas de tiempo (con o sin zonas horarias) también pueden representarse mediante cadenas. Estas representaciones conciernen directamente al usuario de SQL porque, para muchos lenguajes de programación, no existen constantes SQL especiales ni variables de programación con un tipo de datos para valores DATE, TIME, TIMESTAMP SIN ZONA HORARIA o TIMESTAMP CON ZONA HORARIA (para variables con Java). Así, para poder recuperarlos, se debe asignar un valor de fecha y hora a una variable de tipo serie. El formato de la cadena resultante depende del formato de fecha predeterminado y del formato de hora predeterminado que esté en vigor cuando se prepare el extracto.
A cada valor de fecha y hora se le asigna un esquema de codificación. Este esquema de codificación se utiliza cuando el valor de fecha y hora se convierte de su forma interna a la representación de cadena en forma de CCSID mixto si el campo DATOS MIXTOS es SÍ en el panel de instalación DSNTIPF. De lo contrario, se utiliza el SBCS CCSID del esquema de codificación asignado. Para Unicode, siempre se utiliza el CCSID mixto. La siguiente tabla muestra cómo se determina el esquema de codificación:
| Expresión de fecha y hora | Esquema de codificación de resultados |
|---|---|
| Columns | El mismo esquema de codificación que la tabla que contiene la columna |
| Variables de host | Si el extracto hace referencia a:
|
| Registros especiales | Si el extracto hace referencia a:
|
| Expresiones | Si el extracto hace referencia a:
|
Para ASCII y EBCDIC, una representación de cadena de un valor de fecha y hora debe ser una cadena de caracteres. Para Unicode, una representación de cadena de un valor de fecha y hora puede ser una cadena de caracteres o una cadena gráfica. Por lo tanto, el único momento en que se puede utilizar una cadena gráfica para un valor de fecha y hora es cuando el esquema de codificación es Unicode.
En lenguajes de programación distintos de Java, se debe asignar un valor de fecha y hora a una variable de cadena. Cuando se asigna una fecha u hora a una variable de cadena, el formato de la cadena viene determinado por una opción de precompilador o un parámetro de subsistema. Cuando se utiliza una representación de cadena de un valor de fecha y hora en otras operaciones, se convierte en un valor de fecha y hora. Sin embargo, esto solo puede hacerse si la representación de cadena es reconocida por Db2 o una salida proporcionada por la instalación y el otro operando es un valor datetime compatible. Una representación de cadena de entrada de una fecha u hora con LOCAL especificado debe tener una longitud real que no sea superior a 255 bytes.
Los valores de fecha y hora representados por cadenas pueden aparecer en contextos que requieran valores cuyos tipos de datos sean DATE, TIME, TIMESTAMP WITHOUT TIME ZONE o TIMESTAMP WITH TIME ZONE. Una representación de cadena de una fecha, hora o marca de tiempo (con o sin zona horaria) puede pasarse como argumento a la función DATE, TIME, TIMESTAMP o TIMESTAMP_TZ para obtener un valor de fecha y hora. También se puede utilizar una especificación CAST para convertir la representación de un carácter de una fecha, hora o marca de tiempo (con o sin zona horaria) en un valor de fecha y hora.
- Series de fecha:
- Una representación de serie de una fecha es una serie que empieza por un dígito y que tiene una longitud de 8 caracteres como
mínimo. Se pueden incluir espacios en blanco al final, no se permiten espacios en blanco al principio, y se pueden omitir los ceros al principio en las partes del mes y del día.
La siguiente tabla muestra los formatos de cadena válidos para fechas. Cada formato se identifica por su nombre e incluye una abreviatura asociada (para su uso por la función CHAR) y un ejemplo de su uso. Para un formato de cadena de fecha definido por la instalación, el formato y la longitud deben haberse especificado cuando se instaló Db2 . No pueden figurar aquí.
Tabla 2. Formatos para las representaciones de serie de fechas Nombre de formato Abreviatura Formato de fecha Ejemplo International Standards Organization ISO aaaa-mm-dd 12-10-1987 IBM® Estándar de EE. UU EE.UU. mm/dd/aaaa 12/10/1987 IBM Norma europea EUR dd.mm.yyyy 12.10.1987 Era Japanese Industrial Standard Christian JIS aaaa-mm-dd 12-10-1987 Definido por la instalación LOCAL Cualquier formulario definido por la instalación — - Series de hora:
- Una representación de cadena de una hora es una cadena que comienza con un dígito y tiene una longitud de al menos 4 caracteres. Se pueden incluir espacios en blanco al final, no se permiten espacios en blanco al principio, y se pueden omitir los ceros al principio en la parte de la hora; los segundos se pueden omitir por completo. Si decide omitir los segundos, se asume una especificación implícita de 0 segundos. Por lo tanto, 13.30 es equivalente a 13.30.00.
La siguiente tabla muestra los formatos de cadena válidos para las horas. Cada formato se identifica por su nombre e incluye una abreviatura asociada (para su uso por la función CHAR) y un ejemplo de su uso. En el caso de un formato de cadena de tiempo definido por la instalación, el formato y la longitud deben haberse especificado cuando se instaló el subsistema de Db2 . No pueden figurar aquí.
Tabla 3. Formatos para representaciones de serie de horas Nombre de formato Abreviatura Formato de hora Ejemplo Organización Internacional de Normalización 1 ISO1 hh.mm.ss 13.30.05 IBM Estándar de EE. UU EE.UU. hh:mm AM o PM 1:30 PM IBM Norma europea EUR hh.mm.ss 13.30.05 Era Japanese Industrial Standard Christian JIS hh:mm:ss 13:30:05 Definido por la instalación LOCAL Cualquier formulario definido por la instalación — Nota : 1. Esta es una versión anterior del formato ISO. JIS se puede utilizar para obtener el formato ISO actual.En el formato de EE.UU.:
- Los minutos pueden omitirse, especificando así 00 minutos. Por ejemplo, 1 p. m. equivale a 1:00 p. m.
- Las letras A, M y P pueden ser minúsculas.
- Debe haber un espacio en blanco antes de AM o PM.
- La hora no debe ser mayor de 12 y no puede ser 0, excepto en el caso especial de las 00:00 a. m.
Utilizando el formato ISO del reloj de 24 horas, la correspondencia entre el formato de EE. UU. y el reloj de 24 horas es la siguiente:
- de 12:01 a. m. a 12:59 a. m. corresponden a 00.01.00 a 00.59.00
- de 01:00 a. m. a 11:59 a. m. corresponden a 01.00.00 a 11.59.00
- de 12:00 p. m. (mediodía) a 11:59 p. m. corresponden a 12.00.00 a 23.59.00
- 12:00 a. m. (medianoche) corresponde a 24.00.00
- las 00:00 a. m. (medianoche) corresponden a 00.00.00
- Series de indicación de fecha y hora:
- Una representación de cadena de una marca de tiempo es una cadena de caracteres o gráficos que comienza con un dígito y tiene una longitud de al menos 16 caracteres.
El carácter o la cadena gráfica debe contener un valor que se ajuste a uno de los formatos enumerados en Constantes de fecha y hora, sujeto a las siguientes reglas:
- no se permiten espacios en blanco iniciales
- se pueden incluir espacios en blanco al final
- se pueden omitir los ceros iniciales de los elementos de mes, día, hora y zona horaria de la marca de tiempo. Se asume una especificación implícita de 0 para cualquier dígito que se omita.
- la hora puede ser 24 si los minutos, segundos y cualquier fracción de segundo son todos ceros.
- se deben incluir los ceros iniciales de los elementos de minutos, segundos y minutos de zona horaria de la marca de tiempo.
- el número de dígitos de los segundos fraccionarios puede variar de 0 a 12. Se asume una especificación implícita de 0 si se omiten los segundos fraccionarios.
- El carácter de separador que sigue al elemento de segundos se puede omitir si no se incluyen fracciones de segundo.
- se puede incluir un espacio en blanco opcional entre la hora y la zona horaria.
- se puede incluir una zona horaria opcional, en uno de los siguientes formatos:
- ±th:tm, con valores que van de -24:00 a +24:00. Un valor de -0 :00 se trata igual que un valor de+0:00.
- ±th, con valores que van de -24 a +24, y se asume una especificación implícita de 00 para el elemento de minuto de la zona horaria.
- z mayúscula para especificar UTC
Si una representación de cadena de una marca de tiempo se convierte implícitamente a un valor con un tipo de datos de marca de tiempo, se asume que la precisión de la marca de tiempo es 6, independientemente del número de dígitos de segundos fraccionarios en la cadena. Más allá del sexto dígito que representa los segundos fraccionarios, los dígitos se truncan y se asume que los dígitos que faltan son ceros. Por ejemplo,
1990-3-2-8.30.00.10es equivalente a1990-03-02-08.30.00.100000. A una representación de cadena de una marca de tiempo se le puede dar una precisión de marca de tiempo diferente convirtiendo explícitamente el valor a una marca de tiempo con una precisión especificada o, en el caso de una constante, precediendo la cadena con la palabra clave TIMESTAMP (por ejemplo,TIMESTAMP 2007-03-28-14.50.35.123;tiene el tipo de datos TIMESTAMP(3)).Si una representación de cadena de una marca de tiempo se convierte implícitamente a un valor TIMESTAMP WITHOUT TIME ZONE, la cadena no debe contener una zona horaria.
Las sentencias SQL también admiten la representación de cadena ODBC o JDBC de una marca de tiempo solo como valor de entrada. La representación de cadena ODBC y JDBC de una marca de tiempo tiene el formato aaaa-mm-dd hh:mm:ss.nnnnnn.
- Salidas de fecha y hora LOCAL
Para LOCAL, la salida de fecha para datos ASCII es DSNXVDTA, la salida de fecha para EBCDIC es DSNXVDTX y la salida de fecha para Unicode es DSNXVDTU. Para LOCAL, la salida de tiempo para datos ASCII es DSNXVTMA, la salida de tiempo para EBCDIC es DSNXVTMX y la salida de tiempo para Unicode es DSNXVTMU.