DATE + TIME as TIMESTAMP

Otra más de ‘casting‘ entre diferentes tipos de fechas, horas y ‘timestamps‘: ¿cómo obetener un TIMESTAMP a partir de un DATE y un TIME?

Podemos intentar una suma directa:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT (CURRENT_DATE + CURRENT_TIME(0));

 *** Failure 5407 Invalid operation for DateTime or Interval.
                Statement# 1, Info =0
 *** Total elapsed time was 1 second.

Error.

Podemos sumarle un TIME a un DATE convertido en TIMESTAMP:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT CAST(CURRENT_DATE AS TIMESTAMP(0)) + CURRENT_TIME(0);

*** Failure 5407 Invalid operation for DateTime or Interval.
               Statement# 1, Info =0
*** Total elapsed time was 1 second.

Otro error.

Siempre podríamos convertir el DATE y el TIME a cadenas de caracteres, concatenar y volver a convertir a TIMESTAMP, pero hay otra solución.

Ya vimos que las operaciones entre TIMESTAMPs siempre resultan en INTERVALS. Lo mismo ocurre con los TIME:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT CURRENT_TIME - TIME '01:00:00' HOUR TO SECOND(0);


 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

(Current Time(0) - 01:00:00) HOUR TO SECOND
-------------------------------------------
                                   18:46:09

Por otra parte, siempre podemos sumar un INTERVAL a un TIMESTAMP:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT CURRENT_TIMESTAMP(0) + INTERVAL '1' HOUR;


 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

(Current TimeStamp(0)+ 1)
-------------------------
2015-05-12 19:50:08+00:00

Así que, convirtiendo TIME en INTERVAL, sí podemos sumarlo a un TIMESTAMP. Y no hay forma más sencilla que restarle un TIME que en realidad no reste nada: ’00:00:00′.

 
 BTEQ -- Enter your SQL request or BTEQ command:
SELECT CAST(CURRENT_DATE AS TIMESTAMP(0)) + 
((CURRENT_TIME - TIME '00:00:00') HOUR TO SECOND(0)) DT_TO_TIMESTAMP;


 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

    DT_TO_TIMESTAMP
-------------------
2015-05-12 18:52:41

Saludos.

Carlos.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: