Para la conferencia de Pass Alemania, donde presento la sesión “Empower your users with an OUTSTANDING Time Dimension” escribí las siguientes funciones de fecha, que obtienen el primer y último día de un mes, trimestre o año, hay que tener cuidado de donde las usas para no estropear el desempeño:

 

CREATE FUNCTION FirstDayOf (@Date SMALLDATETIME, @Period VARCHAR(10) )

        — Must not have hour or minute

RETURNS SMALLDATETIME

AS

BEGIN

— @Date Must not have hours or minutes

— @Period IN (‘Month’, ‘Quarter’, ‘Year’)

    RETURN

    CASE @Period

        WHEN ‘Month’ THEN DATEADD(DD, 1 DAY(@Date), @Date)

        WHEN ‘Quarter’ THEN DATEADD(Month, 1 MONTH(@Date)

                             + (3*(DATEPART(Quarter, @Date)-1))

                             , DATEADD(DD, 1 DAY(@Date), @Date))

        WHEN ‘Year’         THEN DATEADD(Month, 1MONTH(@Date), DATEADD(DD, 1 DAY(@Date), @Date))

        END

END

GO

 

CREATE FUNCTION LastDayOf(@Date SMALLDATETIME, @Period VARCHAR(10) )    

RETURNS SMALLDATETIME

AS

BEGIN

— @Date Must not have hours or minutes

— @Period IN (‘Month’, ‘Quarter’, ‘Year’)

    RETURN

    CASE @Period

        WHEN ‘Month’    THEN DATEADD(DD, 1, DATEADD(Month, 1,dbo.FirstDayOf(@Date, ‘Month’)))

        WHEN ‘Quarter’    THEN DATEADD(DD, 1, DATEADD(Month, 3,dbo.FirstDayOf(@Date, ‘Quarter’)))

        WHEN ‘Year’        THEN DATEADD(DD, 1, DATEADD(YEAR, 1,dbo.FirstDayOf(@Date, ‘Year’)))

        END

END

go

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like
Leer más

Super SSIS, tu nuevo superhéroe

¿Tus procesos ETL con SSIS rinder a niveles humanos? ¿Necesitas más velocidad, gestionar más datos, mejor performance? ¿No tienes tiempo de esperar al último hijo de Krypton para que ejecute tus DataFlow? En esta sesión veremos técnicas de optimización en entornos modernos (¡estamos en 2017!) para que lleves tus paquetes SSIS al siguiente nivel... ¡el nivel de los superhéroes!