Select dbo.ToolSeniority('20090701','20110111')
RESULTADO:
-------------------------
1 Año 6 Meses 10 Días
Usa dos funciones: (que fui encontrando y adaptando a las necesidades puntuales del formato de salida)
CREATE FUNCTION dbo.DateDiffPoda
(
@type char(2),
@FromDate DATETIME,
@ToDate DATETIME
)
RETURNS INT
BEGIN
RETURN
CASE
WHEN @FromDate > @ToDate THEN NULL --Filtra fecha invertida
ELSE
Case
When upper(@type) not in ('YY','MM','DD') THEN NULL
WHEN upper(@type)='YY' THEN --AÑO
CASE
WHEN DATEPART(day, @FromDate) > DATEPART(day, @ToDate) THEN DATEDIFF(month, @FromDate, @ToDate) - 1
ELSE DATEDIFF(month, @FromDate, @ToDate)
END / 12
WHEN upper(@type)='MM' THEN --MES
CASE
WHEN DATEPART(day, @FromDate) > DATEPART(day, @ToDate) THEN DATEDIFF(month, @FromDate, @ToDate) - 1
ELSE DATEDIFF(month, @FromDate, @ToDate)
END
WHEN upper(@type)='DD' THEN --MES
CASE
WHEN convert(nvarchar,@FromDate,108) > convert(nvarchar,@ToDate,108) THEN DATEDIFF(dd, @FromDate, @ToDate) - 1
ELSE DATEDIFF(dd, @FromDate, @ToDate)
END
end
END
END
GO
CREATE function ToolSeniority
(
@FechaIngreso DATETIME,
@FechaActual DATETIME
)
RETURNS varchar(25)
--------------------
--Ezequiel Podadera
--22/02/2010
--------------------
Begin
Declare @FechaAñoActual datetime --Fecha que tiene el mismo año que fecha actual (para calculo interno)
Declare @FechaAñoActualMES datetime --Fecha que tiene el mismo año y mes que fecha actual (para calcular diff días)
Declare @DiffAño int
Declare @DiffMes int
Declare @DiffDia int
--set @FechaIngreso=getdate()-1549 DATOS DE PRUEBA
--set @FechaActual=getdate()
SET @DiffAño = dbo.datediffPoda('yy',@FechaIngreso,@FechaActual)
-- FechaAñoActual se posiciona a fecha sin diff en años, para calcular diff en mes
SET @FechaAñoActual = Dateadd(yy, @DiffAño,@FechaIngreso)
SET @DiffMes = dbo.datediffPoda('mm',@FechaAñoActual,@FechaActual)
-- FechaAñoActualMes se posiciona a fecha sin diff en años-meses, para calcular diff en días
SET @FechaAñoActualMES = DateADD(mm,@DiffMes,@FechaAñoActual)
SET @DiffDia = dbo.datediffPoda('dd', @FechaAñoActualMES,@FechaActual)
--Formatea la salida
Declare @sAño varchar(8)
Declare @sMes varchar(9)
Declare @sDia varchar(8)
Declare @sSalida varchar(25)
set @sAño= case when @DiffAño = 0 then ''
when @DiffAño = 1 then Cast(@DiffAño as varchar) + ' Año '
when @DiffAño > 1 then Cast(@DiffAño as varchar) + ' Años '
end
set @sMes= case when @DiffMes = 0 then ''
when @DiffMes = 1 then Cast(@DiffMes as varchar) + ' Mes '
when @DiffMes > 1 then Cast(@DiffMes as varchar) + ' Meses '
end
set @sDia= case when @DiffDia = 0 then ''
when @DiffDia = 1 then Cast(@DiffDia as varchar) + ' Día '
when @DiffDia > 1 then Cast(@DiffDia as varchar) + ' Días '
end
set @sSalida= Case when @sAño + @sMes + @sDia ='' then 'Sin Antiguedad' else @sAño + @sMes + @sDia end
Return @sSalida
END
GO
No hay comentarios:
Publicar un comentario