FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como puedo obtener el numero de meses entre 2 fechas en firebird
Hola a todos, son nuevo en esto de los foros y tambien algo nuevo en firebird, necesito obtener el numero de meses que hay entre dos fecha con un Query y la verdad es que no tengo idea de como hacerlo, alguien me podria ayudar? muchas gracias...
|
#2
|
||||
|
||||
Hola ElGatitoTapatio
La verdad no se con meses, pero asi se pueden calcular los dias entre dos fechas, este lo facilito Al Gonzalez: Tal vez te de una idea. Saludos |
#3
|
||||
|
||||
Probaste la función MonthsBetween
|
#4
|
||||
|
||||
Creo que esta función podría ayudarte
La podría implementar utilizando un campo autocalculado, pasándole los valores de las dos fechas. Otra opción sería implementarla en una UDF... NOTA: El código de la función no es mio la autoría se puede encontrar aquí; Tú mismo.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO |
#5
|
||||
|
||||
__________________
|
#6
|
||||
|
||||
Resp
Con una sentencia sql lo puedes sacar lee la funcion extract y aplicale un poco de logica.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
#7
|
|||
|
|||
Gracias a todos por sus respuestas
El problema es hacerlo por medio de SQL, el error lo cometi yo ya que no me explique bien , ahi va mi bronca, tengo una tabla donde guardo informacion de muchas personas entre los datos se encuentra la fecha de ingreso. Ahora a partir de esa tabla y otras, genero una nueva donde debe de contener el numero de quincenas que han pasado desde que ingreso al sistema. Esto lo estoy haciendo por medio de un UPDATE y una subconsula a la tabla antes mencionada, pero hasta el momento solo para obtener algunos otros datos (ya que no se como sacar el no. de quincenas por medio de sql). Entoces ya que tengo los datos en la nueva tabla tengo que recorrer uno por uno hacer el calculo de las quincenas por fuera (en delphi) y hacer un update a cada uno para agregarle su no. de quincenas.
Como podran imaginarse tarda un tiempo considerable ya que estoy hablado de cerca de 2000 mil consultas, entonces la pregunta es si hay alguna manera de hacerlo a todos los datos desde un solo query. Chale escribi como cantinflas pero haber si me entienden. Agradesco mucho su ayuda. |
#8
|
||||
|
||||
Veamos si esto te sirve
Tomemos estas dos fecha
1ra=01/03/2005 2da=01/01/2007 como la fechas para hacer el calculo(Si te das cuenta estan en formato europeo dia/mes/año) interbase trata las fecha en otro formato(mes/dia/año) lo que nos quedaria 1ra=03/01/2005 2da=01/01/2007 y como todos sabes el año tiene 365 dias o 366 si en biciesto si dividimos 365/12 = 30,416666666666666666666666666667 Pero por precicion no se puede usar con todos esos decimales entonces usamos 30.41666666666666667 y la instruccion sql quedaria asi
Por lo del formato de las fechas no debes preocurte amnos que estes pasando las fechas como cadena. Ya que si la lees de la bse de ya esta como la quieres. Espero te sirva de ayuda. Nota: Y por favor si te sirvio responde diciendo que te sirvio.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. Última edición por rastafarey fecha: 12-01-2007 a las 09:11:01. |
#9
|
|||
|
|||
muy buen metodo, pero...
gracias por la respuesta, fijate que practicamente no me sirvio el metodo ya que me acabo de dar cuenta que las fechas que esta almacenadas en la base de datos estan de tipo integer, pero con el siguiente formato yyyymmdd (ejemplo, hoy = 20,070,112), es por eso que no pude implementar tu metodo, sin embargo me dio una idea para otra funcion que necesitaba, muchas gracias.
... por cierto alguna idea para la opcion yyyymmdd?? la verdad es que ya lo deje por la paz, pero por si sale alguna otra opcion pues podria sacar una mejora del metodo.... |
#10
|
||||
|
||||
¿Fechas grabadas como tipo integer?
Hay muchas formas de manejar las fechas con formato 'yyyymmdd' pero como tipo cadena.... pero como enteros....
__________________
|
#11
|
|||
|
|||
Creo si va a estar dificil
Si lamentablemente estoy rediseñando un sistema con una base de datos ya definida y me encontre con esa bronca, pero bueno si veo que va a estar dificil solucionarlo asi que por el momento lo voy a hacer como les habia comentado anteriormente por medio de la interface de delphi y si mas delante consigo alguna forma mejor pues se los informo, muchas gracias.
|
#12
|
||||
|
||||
Resp
Si lo puedes implementar pero al parecer no quieren aprender a preguntar asi que limitare a responder algunas preguntas.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa. |
#13
|
||||
|
||||
Hola, espero te sirva esto:
Creas un procedimiento al que le envias las dos fechas numericas: Código:
CREATE PROCEDURE SP_RESTA_FECHAS ( AN_FECHA1 INTEGER, AN_FECHA2 INTEGER) RETURNS ( NUM_DIAS INTEGER) AS declare variable vs_fecha1 varchar(10); declare variable vs_fecha2 varchar(10); BEGIN vs_fecha1 = substring( cast(an_fecha1 as varchar(8)) from 5 for 2) || '/'|| substring( cast(an_fecha1 as varchar(8)) from 7 for 2) || '/'|| substring( cast(an_fecha1 as varchar(8)) from 1 for 4); vs_fecha2 = substring( cast(an_fecha2 as varchar(8)) from 5 for 2) || '/'|| substring( cast(an_fecha2 as varchar(8)) from 7 for 2) || '/'|| substring( cast(an_fecha2 as varchar(8)) from 1 for 4); Select cast(:vs_fecha2 As Date) - cast(:vs_fecha1 As Date) From rdb$database Into :NUM_DIAS; SUSPEND; END Código SQL [-]Select (select NUM_DIAS FROM SP_RESTA_FECHAS(fechaN1,FechaN2) ) From TablaOrigen Saludos, Jorge. |
#14
|
||||
|
||||
Agregue un argumento mas para meses y cambie el procedimiento:
Código:
CREATE PROCEDURE SP_RESTA_FECHAS ( AN_FECHA1 INTEGER, AN_FECHA2 INTEGER, AV_TIPO CHAR (1) CHARACTER SET WIN1251) RETURNS ( NUM_DIAS INTEGER) AS declare variable vs_fecha1 varchar(10); declare variable vs_fecha2 varchar(10); BEGIN if( av_tipo = 'M' ) then if (substring( cast(an_fecha1 as varchar(8)) from 1 for 4) = substring( cast(an_fecha2 as varchar(8)) from 1 for 4)) then num_dias = cast(substring( cast(an_fecha2 as varchar(8)) from 5 for 2) as integer) - cast(substring( cast(an_fecha1 as varchar(8)) from 5 for 2) as integer) + 1; else num_dias = cast(substring( cast(an_fecha2 as varchar(8)) from 5 for 2) as integer) + (( cast(substring( cast(an_fecha2 as varchar(8)) from 1 for 4) as integer) - cast(substring( cast(an_fecha1 as varchar(8)) from 1 for 4) as integer) ) * 12); else begin vs_fecha1 = substring( cast(an_fecha1 as varchar(8)) from 5 for 2) || '/'|| substring( cast(an_fecha1 as varchar(8)) from 7 for 2) || '/'|| substring( cast(an_fecha1 as varchar(8)) from 1 for 4); vs_fecha2 = substring( cast(an_fecha2 as varchar(8)) from 5 for 2) || '/'|| substring( cast(an_fecha2 as varchar(8)) from 7 for 2) || '/'|| substring( cast(an_fecha2 as varchar(8)) from 1 for 4); num_dias = cast(:vs_fecha2 As Date) - cast(:vs_fecha1 As Date); end SUSPEND; END Código SQL [-]select (select num_dias from RESTA(fecha1,fecha2,tipo) From TablaOrigen Donde Tipo es M=Meses y por default días. Espero en algo haberte ayudado, Jorge. |
#16
|
|||
|
|||
Gracias jwmoreira por el procedimiento...
Lo voy a implementar y les aviso resultados
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Calcular numero de dias entre dos fechas | vero | Varios | 22 | 31-05-2011 15:37:34 |
Obtener tiempo entre fechas | YaninaGenia | Oracle | 5 | 04-05-2006 21:46:20 |
función para obtener diferencias entre fechas - Firebird | clanmilano | SQL | 1 | 11-11-2005 14:29:52 |
Numero de dias entre fechas (TDateTime) | sierraja | Varios | 4 | 26-04-2005 19:29:02 |
numero de semanas entre 2 fechas | marrullas | SQL | 1 | 10-05-2004 20:21:18 |
|