11/02/2009, 15:28
|
| Colaborador | | Fecha de Ingreso: julio-2007 Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses Puntos: 180 | |
Respuesta: Ayuda con fecha de sql server 2005 calegria
Esta funcion te calcula en AÑOS, MESES, DIAS, lo que ha trascurrido entre 2 fechas dadas.
Código:
CREATE FUNCTION EntreFechasAñoMesDia (@CadenaInicio as nvarchar(10), @CadenaFin as nvarchar(10))
RETURNS nvarchar (100)
AS
BEGIN
declare @AñoInicio int
declare @MesInicio int
declare @DiaInicio int
declare @AñoFin int
declare @MesFin int
declare @DiaFin int
declare @Años int
declare @Meses int
declare @Dias int
declare @FechaInicio datetime
declare @FechaFin datetime
declare @Texto nvarchar(100)
--Para comprobar las fechas
if isdate(@CadenaInicio)=0 return('La fecha de Inicio no es correcta')
if isdate(@CadenaFin)=0 return ('La fecha de Fin no es correcta')
if datediff(dd, @CadenaInicio, @CadenaFin) = 0 return('La fecha de Inicio es igual que la de Fin')
--Asigna las cadenas a las fechas, inviertiéndolas si es necesario y cambiando el mensaje de salida.-
if datediff(dd, @CadenaInicio, @CadenaFin) > 0
begin
set @FechaInicio = @CadenaInicio
set @FechaFin = @CadenaFin
set @Texto = 'Pasa'
end
else
begin
set @FechaInicio = @CadenaFin
set @FechaFin = @CadenaInicio
set @Texto = 'Falta'
end
--Asigna los valores individuales de día, mes y año, para hacer los cálculos.-
set @DiaInicio = day(@FechaInicio)
set @MesInicio = month(@FechaInicio)
set @AñoInicio = year(@FechaInicio)
set @DiaFin = day(@FechaFin)
set @MesFin = month(@FechaFin)
set @AñoFin = year(@FechaFin)
--Comprueba si el día es menor o igual al de fin.-
if @DiaFin - @DiaInicio >= 0
begin
set @Dias = @DiaFin - @DiaInicio
end
--Si no, calcula la suma en días, desde el día de Inicio a fin de mes, mas los días de Fin, y le resta uno al mes de Fin.-
else
begin
set @Dias = (day(dateadd(mm,1,cast(('01/' + str(@MesInicio) + '/' + str(@AñoInicio)) as datetime)) - 1 )- @DiaInicio) + @DiaFin
set @MesFin = @MesFin - 1
end
--Lo mismo con el mes.-
if @MesFin - @MesInicio >= 0
begin
set @Meses = @MesFin - @MesInicio
end
else
begin
set @Meses = (@MesFin - @MesInicio) + 12
set @AñoFin = @AñoFin - 1
end
set @Años = @AñoFin - @AñoInicio
--A partir de qaquí ya tenemos los vlores del año, mes y día, lo siguiente es para presentarlo correctamente.-
declare @CadDia as varchar(20)
declare @CadMes as varchar(20)
declare @CadAño as varchar(20)
if @Dias = 0 set @CadDia = ''
if @Dias = 1 set @CadDia = ltrim(str(@Dias)) + ' día '
if @Dias > 1 set @CadDia = ltrim(str(@Dias)) + ' días '
if @Meses = 0 set @CadMes = ''
if @Meses = 1 set @CadMes = ltrim(str(@Meses)) + ' mes'
if @Meses > 1 set @CadMes = ltrim(str(@Meses)) + ' meses'
if @Años = 0
begin
set @CadAño = ''
if @Meses > 1 set @Texto = @Texto + 'n'
if @Meses = 0 and @Dias >1 set @Texto = @Texto + 'n'
end
if @Años = 1 set @CadAño = ltrim(str(@Años)) + ' año'
if @Años > 1
begin
set @CadAño = ltrim(str(@Años)) + ' años'
set @Texto = @Texto + 'n'
end
if @Meses <> 0
begin
if @Dias <> 0
begin
set @CadMes = @CadMes + ' y '
if @Años <> 0 set @CadAño = @CadAño + ', '
end
else
if @Años <> 0 set @CadAño = @CadAño + ' y '
end
else
if @Años <> 0 and @Dias <> 0 set @CadMes = @CadMes + ' y '
--end
Set @Texto = @Texto + ' ' + @CadAño + @CadMes + @CadDia
RETURN @Texto
END
|