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

Particionado de tablas en SQL Server 2014

Tradicionalmente el particionado de datos no ha sido muy de mi agrado por las implicaciones de mantenimiento que se tenian asociadas. Tareas como reindexar, mover particiones entre tablas, actualizar estadísticas,…no eran tarea sencilla en entornos con carga 24x7 en el momento en el que particionabas una tabla.