PDA

Ver la Versión Completa : Extraer Hora de Campo Date en firebird


rruffino
08-11-2011, 12:23:08
Hola gente, estoy con firebird 2.1, el dialecto es 3. He estado realizando un procedimiento almacenado pero ahora me veo en la necesidad de extraer la hora de una fecha, pero no encuentro la forma de hacerlo. Necesito sacar la hora para comparar y trabajar con ella. Les agradezco si alguien sabe como y lo comparte.
Saludos!!!:)

ecfisa
08-11-2011, 12:37:03
Hola rrufino.

Para extraer la hora podrías usar:

SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS HORA FROM RDB$DATABASE


O si fuera sobre un campo de una tabla, sería:

SELECT EXTRACT(HOUR FROM CAMPO_FECHA) AS HORA FROM TU_TABLA


Un saludo.

rruffino
08-11-2011, 12:58:01
Hola!! Gracias por tu respuesta. En realidad yo en mi procedimiento almacenado tengo un parametro input del tipo TIME. El tema es que cuando yo quiero usarlo para comparar la hora con una variable interna, tambien del tipo time, me tira error de conversion porque el parametro no tiene un valor en formato tiempo como por ejemplo 8:00:15 sino que tiene el formato fecha-hora, por ejemplo 10/11/2011 8:00:15. Por eso preguntaba si se puede extraer toda la hora (8:00:15) completa para que no tire ese error, o en su defecto como puedo hacer para comparar con la variable interna que esa si tiene el formato deseado (8:00:15). Espero haberme explicado mejor. Muchas muchas gracias!!:o

ecfisa
08-11-2011, 13:11:18
Hola.

Entiendo, el parámetro es de tipo TIMESTAMP. Creo que podrías hacer un CAST sobre el valor del parámetro, como no conozco el código te pongo un ejemplo general del uso:

SELECT CAST(CURRENT_TIMESTAMP AS TIME) AS HORA FROM RDB$DATABASE


Un saludo.

ecfisa
08-11-2011, 13:37:02
Hola rrufino.

Te pongo un ejemplo más concreto en que se compara un valor tipo TIMESTAMP y un tipo TIME:

CREATE PROCEDURE ES_IGUAL(HORA1 TIMESTAMP, HORA2 TIME)
RETURNS(RESULT SMALLINT)
AS
DECLARE VARIABLE AUX TIME;
BEGIN
AUX = CAST(HORA1 AS TIME);
IF (AUX = HORA2) THEN /* directamente: IF (CAST(HORA1 AS TIME) = HORA2) THEN */
RESULT = 1;
ELSE
RESULT = 0;
END;

La variable AUX es innecesaria en este caso, pero está como para ejemplificar el uso con una variable interna.

Saludos.