Función escalar TIMESTAMP_FORMAT o TO_TIMESTAMP

La función TIMESTAMP_FORMAT devuelve un valor TIMESTAMP WITHOUT TIME ZONE que se basa en la interpretación de la serie de entrada utilizando el formato especificado.

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visual TIMESTAMP_FORMATTO_TIMESTAMP1 ( expresión de cadena , cadena de formato ,6,constante de precisión )
Notas:

El esquema es SYSIBM.

expresión-serie
Expresión que devuelve un valor de cualquier tipo de datos de cadena gráfica o carácter integrado, que no sea un CLOB o DBCLOB, con una longitud real que no sea superior a 255 bytes. La expresión de cadena debe contener los componentes de una marca de tiempo que se correspondan con el formato especificado en la cadena de formato, excepto para la hora, los minutos, los segundos o los segundos fraccionarios.
cadena de formato
Inicio del cambioExpresión que devuelve un valor que es un tipo de datos de cadena gráfica o carácter integrado, que no sea un CLOB o DBCLOB. La longitud real no debe ser superior a 255 bytes.fin del cambio El valor es una plantilla de cómo se interpreta la expresión de cadena y luego se convierte en un valor de marca de tiempo.

Una cadena de formato válida debe contener al menos un elemento de formato, no debe contener múltiples especificaciones para ningún componente de una marca de tiempo y puede contener cualquier combinación de los elementos de formato, a menos que se indique lo contrario en la siguiente tabla. Por ejemplo, la cadena de formato no puede contener tanto YY como YYYY, porque ambas se utilizan para interpretar el componente de año de una expresión de cadena. Dos elementos de formato pueden separarse mediante uno o más de los siguientes caracteres separadores:

  • signo menos (-)
  • punto (.)
  • barra inclinada (/)
  • coma (,)
  • apóstrofo (')
  • Punto y coma (;)
  • dos puntos (:)
  • espacio en blanco ( )

También se pueden especificar caracteres separadores al principio o al final del formato de cadena. Estos caracteres separadores se pueden utilizar en cualquier combinación en la cadena de formato, por ejemplo, «AAAA/MM-DD HH:MM.SS ». El carácter separador que se especifica en una expresión de cadena se utiliza para separar componentes y no es necesario que coincida con el carácter separador que se especifica en la cadena de formato.

Tabla 1. Elementos de formato para la función TIMESTAMP_FORMAT
Elemento de formato Componente de marca de tiempo relacionado Descripción
AM o PM 1 hour Indicador de meridiano (mañana o tarde) sin puntos. Este elemento de formato utiliza las cadenas exactas «AM» o «PM».
A.M. o P.M. 1 hour Indicador de meridiano (mañana o tarde) con puntos. Este elemento de formato utiliza las cadenas exactas « A.M » o "p.m."
D 1 ninguno Día de la semana (1-7).
DD day Día del mes (0-31).
DDD mes, día Día del año (001-366).
FF o FFn Fracciones de segundos Segundos fraccionarios (0-999999999999). El número n se utiliza para especificar el número de dígitos que se esperan en la expresión de cadena. Los valores válidos para n son del 1 al 12 sin ceros iniciales.

Especificar FF equivale a especificar FF6. Cuando el componente de la expresión de cadena que corresponde al elemento de formato FF va seguido de un carácter separador o es el último componente, el número de dígitos de los segundos fraccionarios puede ser menor que el especificado por el elemento de formato. En este caso, se añaden ceros a la derecha del número de dígitos especificados.

HH hour HH se comporta igual que HH12.
HH12 hour Hora del día (01-12) en formato de 12 horas. AM es el indicador de meridiano por omisión.
HH24 hour Hora del día (00-24) en formato de 24 horas.
J año, mes y día Día juliano, número de días transcurridos desde el 1 de enero de 4713 a. C. (0000000-9999999)
MI minuto Minuto (00-59).
MM month Mes (01-12).
MES, Mes, o mes 1, 2 month Nombre del mes en inglés.
LUN, Lun, o lun 1, 2 month Nombre abreviado del mes en inglés.
NNNNNN microsegundos Microsegundos, en el mismo formato que FF6. (000000-999999).
RR año Dos últimos dígitos del año ajustado (00-99).
RRRR año RRRR se comporta igual que YYYY.
SS segundos Segundos (00-59).
SSSSS horas, minutos y segundos Segundos desde la medianoche anterior (00000-86400).
Y año Último dígito del año (0-9). Se utilizan los tres primeros dígitos del año actual para determinar el año completo de 4 dígitos.
YY año Dos últimos dígitos del año (00-99). Se utilizan los dos primeros dígitos del año actual para determinar el año completo de 4 dígitos.
YYY año Tres últimos dígitos del año (000-999). Se utiliza el primer dígito del año actual para determinar el año completo de 4 dígitos.
YYYY año Año de 4 dígitos (0000-9999).
Notas:
  1. Este elemento de formato distingue entre mayúsculas y minúsculas.
  2. Solo se pueden utilizar estas grafías y combinaciones de mayúsculas y minúsculas exactas. Si este elemento de formato se especifica en una combinación de mayúsculas y minúsculas no válida, se devuelve un error.
  3. El elemento de formato D no contribuye a ningún componente de la marca de tiempo resultante. Sin embargo, un valor especificado para este elemento de formato debe ser correcto para la combinación del componente de día de la marca de tiempo resultante. Por ejemplo, un valor de «5» para la expresión de cadena es válido para un valor de cadena de formato de «D». Sin embargo, el valor '9' para la expresión de cadena generaría un error para la misma cadena de formato.
El elemento de formato RR puede utilizarse para cambiar la forma en que debe interpretarse una especificación para un año ajustando el valor para producir un valor de 4 dígitos en función de los dos últimos dígitos del año en curso según la siguiente tabla:
Tabla 2. Correspondencia del valor anual ajustado y el componente de marca de tiempo
Dígitos del año en curso Año de dos dígitos en expresión de cadena Dos primeros dígitos del componente de año de la indicación de fecha y hora
00-50 00-49 Dos primeros dígitos del año actual
51-99 00-49 Dos primeros dígitos del año actual + 1
00-50 50-99 Primeros dos dígitos del año en curso -1
51-99 50-99 Dos primeros dígitos del año actual

Por ejemplo, si el año actual es 2007, '86' con el formato 'RR' significa 1986, pero si el año actual es 2052, significa 2086.

Se utilizan los valores por omisión siguientes cuando una serie-formato no incluye un elemento de formato para uno de los siguientes componentes de una indicación de fecha y hora:
Componente de indicación de fecha y hora Valor por omisión
año año en curso, con 4 dígitos
month mes en curso. como 2 dígitos
day 01 (primer día del mes)
hour 00
minuto 00
second 00
Fracciones de segundos un número de ceros para que coincida con la precisión de la marca de tiempo del resultado

Si la expresión de cadena no incluye un valor que corresponda a un elemento de formato de hora, minuto, segundo o segundos fraccionarios especificado en la cadena de formato, se utilizan los mismos valores predeterminados.

Se pueden especificar ceros a la izquierda para cualquier componente del valor de la marca de tiempo (es decir, mes, día, hora, minutos, segundos) que no tenga el número máximo de dígitos significativos para el elemento de formato correspondiente en la cadena de formato.

Una subcadena de la expresión de cadena que representa un componente de una marca de tiempo (como año, mes, día, hora, minutos, segundos) puede incluir menos del número máximo de dígitos para ese componente de la marca de tiempo que se indica mediante el elemento de formato correspondiente. Los dígitos que faltan toman por omisión cero. Por ejemplo, con una cadena de formato «AAAA-MM-DD HH24:MI:SS », un valor de entrada de «999-3-9 5:7:2» produce el mismo resultado que «0999-03-09 05:07:02».

constante de precisión
constante entera que especifica la precisión de la indicación de fecha y hora del resultado. El valor debe estar comprendido entre 0 y 12. Si no se especifica la precisión constante, la precisión de la marca de tiempo se establece por defecto en 6.

El resultado de la función es un TIMESTAMP con una precisión que se basa en la precisión constante.

Si cualquiera de los dos primeros argumentos puede ser nulo, el resultado puede ser nulo; si cualquiera de los dos primeros argumentos es nulo, el resultado es el valor nulo.

El resultado CCSID es el CCSID apropiado del esquema de codificación del primer argumento y el subtipo de resultado es el subtipo apropiado del CCSID.

Notas

Calendario juliano y gregoriano:
Esta función tiene en cuenta la transición del calendario juliano al gregoriano el 15 de octubre de 1582.
Determinismo:
TIMESTAMP_FORMAT es una función determinista. Sin embargo, las siguientes invocaciones de la función dependen del valor del registro especial CURRENT TIMESTAMP.
  • serie-formato no es una constante
  • serie-formato es una constante e incluye elementos de formato que son sensibles al entorno local
  • format-string es una constante y no incluye un elemento de formato que defina completamente el año (es decir, J o AAAA ). En este caso se utiliza el año en curso.
  • format-string es una constante y no incluye un elemento de formato que defina completamente el mes (por ejemplo, J, MM, MONTH o MON). En este caso se utiliza el mes actual.

Estas invocaciones, que dependen del valor de un registro especial, no pueden utilizarse donde no puedan utilizarse registros especiales.

Uso de los elementos de formato «D», «Y» e «y»:
Db2 for z/OS® no admite los elementos de formato «DY», «dy» y «Dy» que sí admiten otras plataformas. Si se especifica «DY» o «Dy» en la cadena de formato, se interpreta como el elemento de formato «D» seguido del elemento de formato «Y» o «y». Este comportamiento podría cambiar en una versión futura. Para garantizar que una «D» seguida de «Y» o «y» se interprete como dos elementos de formato separados, incluya un carácter separador después del elemento de formato «D».
Sintaxis alternativa:

Inicio del cambioFL 506 TO_TIMESTAMP es un sinónimo de TIMESTAMP_FORMAT.fin del cambio

TO_DATE es sinónimo de TIMESTAMP_FORMAT.

ejemplos

Ejemplo 1:
Inserte una fila en la tabla IN_TRAY con una marca de tiempo de recepción que sea igual a un segundo antes del comienzo del año 2000 (31 de diciembre de 1999 a las 23:59:59).
INSERT INTO IN_TRAY (RECEIVED)
	VALUES (TIMESTAMP_FORMAT('1999-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS'))
Ejemplo 2:
Una aplicación recibe cadenas de información de fecha en una variable llamada INDATEVAR. Este valor no se formatea de forma estricta y puede incluir dos o cuatro dígitos para años y uno o dos dígitos para meses y días. Los componentes de la fecha pueden ir separados por el signo menos (-) o la barra (/) y deben ir en orden de día, mes y año. La información de hora consta de horas (en formato de 24 horas) y minutos y se suele separar mediante dos puntos. '15/12/98 13:48' y '9-3-2004 8:02' son valores de ejemplo. Inserte valores de este tipo en la tabla IN_TRAY.
INSERT INTO IN_TRAY (RECEIVED)
	VALUES (TIMESTAMP_FORMAT(:INDATEVAR, 'DD/MM/RRRR HH24:MI'))
El uso de «RRRR» en el formato permite valores de año de 2 y 4 dígitos y asigna los dos primeros dígitos que faltan en función del año en curso. Si se utiliza «AAAA», los valores introducidos con un año de 2 dígitos tendrán ceros a la izquierda. El separador de barra inclinada también permite el carácter de signo menos. Suponiendo que el año actual sea 2007, los valores de marca de tiempo resultantes de los valores de muestra son los siguientes:
'15/12/98 13:48' --> 1998-12-15-13.48.00.000000
'9-3-2004 8:02' --> 2004-03-09-08.02.00.000000