Datediff preciso

31/01/2005 - 14:49 por Javier Carvajal | Informe spam
Me gustaría saber si alguno de vosotro habeis desarrollado alguna versión de
Datediff que sea más precisa para calcular diferencias entre meses o años,
ya que el datediff normal te devuelve únicamente la resta del número de años
o meses. Me explicaré mejor con un ejemplo:

Datediff(m,'31/01/2005','01/02/2005')

Debería devolver 0, ya que no ha transcurrido ningún mes entre una y otra
fecha (de hecho sólo ha transcurrido un día), pero devuelve 1, que es la
diferencia entre el mes 2 y el mes 1.
No creo que implementar una nueva versión de la función como procedimiento
almacenado para estos dos casos sea muy complicado, pero seguro que me
dejaría algún caso sin cubrir. Así que como imagino que alguno de vosotros
se habrá encontrado en esta misma tesitura, igual teneis alguna otra manera
de resolverlo.


Javier Carvajal
MCP - SQL Server 2000

Preguntas similare

Leer las respuestas

#1 Maxi
31/01/2005 - 15:43 | Informe spam
Hola Javier, yo generalmente lo que hago es hacer la dif en dias.


Salu2
Maxi


"Javier Carvajal" escribió en el mensaje
news:
Me gustaría saber si alguno de vosotro habeis desarrollado alguna versión
de
Datediff que sea más precisa para calcular diferencias entre meses o años,
ya que el datediff normal te devuelve únicamente la resta del número de
años
o meses. Me explicaré mejor con un ejemplo:

Datediff(m,'31/01/2005','01/02/2005')

Debería devolver 0, ya que no ha transcurrido ningún mes entre una y otra
fecha (de hecho sólo ha transcurrido un día), pero devuelve 1, que es la
diferencia entre el mes 2 y el mes 1.
No creo que implementar una nueva versión de la función como procedimiento
almacenado para estos dos casos sea muy complicado, pero seguro que me
dejaría algún caso sin cubrir. Así que como imagino que alguno de vosotros
se habrá encontrado en esta misma tesitura, igual teneis alguna otra
manera
de resolverlo.


Javier Carvajal
MCP - SQL Server 2000



Respuesta Responder a este mensaje
#2 Javier Carvajal
31/01/2005 - 16:55 | Informe spam
El problema es que estoy desarrollando una serie de procedimientos que
calculan en función a la diferencia de meses transcurridos entre dos fechas,
y no puedo calcular en días porque tiene que ser un cálculo exacto.
Nuevamente me explico con un ejemplo para que se me entienda mejor:

Si tengo que calcular los meses transcurridos del día 8 de enero al 7 de
febrero, si calculo por días me dará 30 días, por lo cual puedo decir que ha
transcurrido un mes, sin embargo alguien que ha "nacido" el día 8 de enero
no cumplirá un mes hasta el 8 de febrero.

El procedimiento en cuestión tiene que calcular antiguedades de
nombramientos y acontecimientos, y es muy importante que ese cálculo de
meses sea exacto, ya que marca los diferentes intervalos y condiciones que
intervendrán en cada registro.


Javier Carvajal
MCP - SQL Server 2000

"Maxi" escribió en el mensaje
news:
Hola Javier, yo generalmente lo que hago es hacer la dif en dias.


Salu2
Maxi


"Javier Carvajal" escribió en el mensaje
news:
> Me gustaría saber si alguno de vosotro habeis desarrollado alguna


versión
> de
> Datediff que sea más precisa para calcular diferencias entre meses o


años,
> ya que el datediff normal te devuelve únicamente la resta del número de
> años
> o meses. Me explicaré mejor con un ejemplo:
>
> Datediff(m,'31/01/2005','01/02/2005')
>
> Debería devolver 0, ya que no ha transcurrido ningún mes entre una y


otra
> fecha (de hecho sólo ha transcurrido un día), pero devuelve 1, que es la
> diferencia entre el mes 2 y el mes 1.
> No creo que implementar una nueva versión de la función como


procedimiento
> almacenado para estos dos casos sea muy complicado, pero seguro que me
> dejaría algún caso sin cubrir. Así que como imagino que alguno de


vosotros
> se habrá encontrado en esta misma tesitura, igual teneis alguna otra
> manera
> de resolverlo.
>
>
> Javier Carvajal
> MCP - SQL Server 2000
>
>
>



Respuesta Responder a este mensaje
#3 Maxi
31/01/2005 - 17:02 | Informe spam
Hola, te entiendo, mira fijate en www.sqlservercentral.com que suele haber
este tipo de cosas, quizas alguien armo alguna UDF para calcular esto.




Salu2
Maxi


"Javier Carvajal" escribió en el mensaje
news:
El problema es que estoy desarrollando una serie de procedimientos que
calculan en función a la diferencia de meses transcurridos entre dos
fechas,
y no puedo calcular en días porque tiene que ser un cálculo exacto.
Nuevamente me explico con un ejemplo para que se me entienda mejor:

Si tengo que calcular los meses transcurridos del día 8 de enero al 7 de
febrero, si calculo por días me dará 30 días, por lo cual puedo decir que
ha
transcurrido un mes, sin embargo alguien que ha "nacido" el día 8 de enero
no cumplirá un mes hasta el 8 de febrero.

El procedimiento en cuestión tiene que calcular antiguedades de
nombramientos y acontecimientos, y es muy importante que ese cálculo de
meses sea exacto, ya que marca los diferentes intervalos y condiciones que
intervendrán en cada registro.


Javier Carvajal
MCP - SQL Server 2000

"Maxi" escribió en el mensaje
news:
Hola Javier, yo generalmente lo que hago es hacer la dif en dias.


Salu2
Maxi


"Javier Carvajal" escribió en el mensaje
news:
> Me gustaría saber si alguno de vosotro habeis desarrollado alguna


versión
> de
> Datediff que sea más precisa para calcular diferencias entre meses o


años,
> ya que el datediff normal te devuelve únicamente la resta del número de
> años
> o meses. Me explicaré mejor con un ejemplo:
>
> Datediff(m,'31/01/2005','01/02/2005')
>
> Debería devolver 0, ya que no ha transcurrido ningún mes entre una y


otra
> fecha (de hecho sólo ha transcurrido un día), pero devuelve 1, que es
> la
> diferencia entre el mes 2 y el mes 1.
> No creo que implementar una nueva versión de la función como


procedimiento
> almacenado para estos dos casos sea muy complicado, pero seguro que me
> dejaría algún caso sin cubrir. Así que como imagino que alguno de


vosotros
> se habrá encontrado en esta misma tesitura, igual teneis alguna otra
> manera
> de resolverlo.
>
>
> Javier Carvajal
> MCP - SQL Server 2000
>
>
>








Respuesta Responder a este mensaje
#4 Javier Carvajal
31/01/2005 - 17:38 | Informe spam
He mirado y hay un artículo similar referente a aniversarios (When is your
anniversary?), aunque finalmente he estado pensando y en mi caso me servirá
el datediff, ya que siempre comparo con el último día de un mes determinado,
así que no se me puede dar ningún caso como los que planteaba.
No obstante gracias por la ayuda.


Javier Carvajal
MCP - SQL Server 2000

"Maxi" escribió en el mensaje
news:
Hola, te entiendo, mira fijate en www.sqlservercentral.com que suele haber
este tipo de cosas, quizas alguien armo alguna UDF para calcular esto.
Respuesta Responder a este mensaje
#5 ulises
31/01/2005 - 17:51 | Informe spam
Bueno, de todas maneras tendrás que calcular por lo menos el número
de día del mes, este ejemplo tal vez te pueda servir :

declare @fecha01 datetime
declare @fecha02 datetime
set @fecha01 = '20050131'
set @fecha02 = '20050201'
if day(@fecha02) >= day(@fecha01)
select Datediff(m,@fecha01,@fecha02) as meses
else
select Datediff(m,@fecha01,@fecha02) - 1 as meses

en todo caso, habría que revisar que valor debes regresar cuando se
trate entre fechas 2005-08-31 y 2005-09-30, son fecha finales de mes
pero aún no habría transcurrido un mes según el script anterior, tú
debes determinar si eso está bien o si debe modificarse.

Saludos,
Ulises

On Mon, 31 Jan 2005 16:55:41 +0100, "Javier Carvajal"
wrote:

El problema es que estoy desarrollando una serie de procedimientos que
calculan en función a la diferencia de meses transcurridos entre dos fechas,
y no puedo calcular en días porque tiene que ser un cálculo exacto.
Nuevamente me explico con un ejemplo para que se me entienda mejor:

Si tengo que calcular los meses transcurridos del día 8 de enero al 7 de
febrero, si calculo por días me dará 30 días, por lo cual puedo decir que ha
transcurrido un mes, sin embargo alguien que ha "nacido" el día 8 de enero
no cumplirá un mes hasta el 8 de febrero.

El procedimiento en cuestión tiene que calcular antiguedades de
nombramientos y acontecimientos, y es muy importante que ese cálculo de
meses sea exacto, ya que marca los diferentes intervalos y condiciones que
intervendrán en cada registro.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida