Ir al contenido


Foto

Sumar fechas en Firebird


  • Por favor identifícate para responder
8 respuestas en este tema

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 04 octubre 2011 - 10:23

Saludos a todos, estoy sacando un procedimiento almacenado donde necesito sumar dos horas. Alguna funcion de Firebird que me permita hacer eso???


Gracias
  • 0

#2 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 04 octubre 2011 - 10:40

No sé si es lo que buscas pero extrayendo cada hora y sumarlas posteriormente podría funcionarte, espero.

http://www.firebirds...20-extract.html

ó

Checa este set de UDF's:

http://freeadhocudf...._eng_datum.html
  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 04 octubre 2011 - 11:28

En firebird no se puede hacer una cast de un datetime o timestamp a float, por lo que la suma directa no es posible como en delphi, has de pasar por descomponer en horas, minutos, etc. y sumarlas a mano, como ya te han comentado en un ejemplo, usando un procedure tipo SumaHoras(h1, h2: Time): Time, o usar una dll como UDF, que a mi no me gusta nada, te obliga a distribuirla y a hacerte responsable de la instalación de FireBird.

Por cierto, ten en cuenta que sumar horas puede darte dias... 12h+12h = 1 día... o más, así que ojo a esto, puedes obviar los dias o sumarlos como +24h, pero el resultado cambia y puede no "caberte" en un Time si quieres obtener cosas tipo 72h.
  • 0

#4 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

Escrito 04 octubre 2011 - 01:26

Espero te sirva =) http://www.firebirds...nc-dateadd.html
  • 0

#5 javsolis3

javsolis3

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.380 mensajes
  • LocationPanama

Escrito 04 octubre 2011 - 02:29

waoo ustedes si que manejan base de datos jejejeje. Yo soy de sistemas operativos espero aprender un poco mas de base de datos jejejeje veo sus temas y bueno me quiero meter en la linea y que va los scrip que manejo son sencillos.
  • 0

#6 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 04 octubre 2011 - 03:02

Espero te sirva =) http://www.firebirds...nc-dateadd.html


Esta funcion ya la vi, pero el asunto es que tengo dos parametros:

Hora1 y Hora2, el resultado seria: Hora3 := Hora1 + Hora2;

No supe como configurarla
  • 0

#7 mightydragon_lord

mightydragon_lord

    Advanced Member

  • Miembros
  • PipPipPip
  • 73 mensajes

Escrito 04 octubre 2011 - 07:44


Espero te sirva =) http://www.firebirds...nc-dateadd.html


Esta funcion ya la vi, pero el asunto es que tengo dos parametros:

Hora1 y Hora2, el resultado seria: Hora3 := Hora1 + Hora2;

No supe como configurarla

Sería algo así como

DateAdd(HoraDos To HoraUno);

Así horauno queda con lo de ella mas horados
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 05 octubre 2011 - 07:17

Eduardo, aquí te pongo una tabla con las operaciones con fechas y horas permitidas por Firebird, para que te hagas una idea de como afrontar el problema.






OPERAND 1      OPERATOR  OPERAND 2                    RESULT


DATE                    +                TIME                            TIMESTAMP (arithmetic concatenation)


DATE                    +                Numeric value n‡        Advances DATE by n wholedays (ignoring fraction of n ifpresent)


TIME                      +                DATE                          TIMESTAMP (arithmetic concatenation)

TIME                      +                Numeric value n‡      Advances TIME by n seconds †


TIMESTAMP            +                Numeric value n‡      Advances TIMESTAMP by the whole-number part of n days
                                                                                  plus the fraction part of n (if present) as a fraction of the
                                                                                  number of thousandths of
                                                                                  seconds in a day (8.64 × 10 a la 8)
                                 
DATE                      –              DATE                          DECIMAL(9,0) days of interval


DATE                      –              Numeric value n‡        Reduces DATE by n days(ignoring fraction of n if present)


TIME                      –            TIME                            DECIMAL(9,4) seconds ofinterval


TIME                      –            Numeric value n‡        Reduces TIME by n seconds †


TIMESTAMP            –            TIMESTAMP                DECIMAL(18,9) days and part-day of interval


TIMESTAMP            –            Numeric value n‡      Reduces TIMESTAMP by the whole-number part of n days
                                                                                plus the fraction part of n (if
                                                                                present) as a fraction of the
                                                                                number of thousandths of
                                                                                seconds in a day (8.64 × 10 a la 8)



†  If necessary, repeats (result=modulo(result, (24 * 60 * 60))) until resultant day-part is eliminated.
‡  For the dialect 3 DATE type, n is an integer representing days. For TIMESTAMP and dialect 1
DATE types, n can be a numeric representing days to the left of the decimal point and a part
day to the right. For the TIME type, n is an integer representing seconds.


  • 0

#9 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 08 octubre 2011 - 12:51

Gracias a todos por sus soluciones, tan pronto tenga oportunidad implementare a ver cual da mejor resultado, de momento me ha tocado un campo calculado en el dataset resultante para salir del apuro
  • 0




IP.Board spam blocked by CleanTalk.