En los sistemas que conlleva llevar un control de plazos o gestión documental para tener reportes y generación de documentación siguiendo estándares ISO u otro, es necesario tener una tabla calendario que nos permita realizar consultas, así como llevar un control del mismo.
Código fuente:
/** * * NubeAndo.COM - Educar es Compartir * * @author: Ing. Angel Céspedes Quiroz * @Web: https://www.nubeando.com * @Linkedin: https://bo.linkedin.com/in/acq1305 * */ CREATE DATABASE FECHATIEMPOBD GO USE FECHATIEMPOBD GO -- Creación de la tabla create table Dim_Tiempo ( FechaSK int not null, Fecha date not null, Anio smallint not null, Semestre smallint not null, Trimestre smallint not null, Mes smallint not null, Semana smallint not null, Dia smallint not null, DiaSemana smallint not null, NSemestre char(7) not null, NTrimestre char(7) not null, NMes char(15) not null, NMes3L char(6) not null, NSemana char(10) not null, NDia char(6) not null, NDiaSemana char(10) not null constraint PK_DIM_TIEMPO PRIMARY KEY CLUSTERED (Fecha asc) ) -- Script de carga DECLARE @FechaDesde as smalldatetime, @FechaHasta as smalldatetime DECLARE @FechaAAAAMMDD int DECLARE @Año as smallint, @Semestre char(2), @Trimestre char(2), @Mes smallint DECLARE @Semana smallint, @Dia smallint, @DiaSemana smallint DECLARE @NSemestre char(7), @NTrimestre char(7), @NMes char(18) DECLARE @NMes3l char(6) DECLARE @NSemana char(10), @NDia char(6), @NDiaSemana char(10) --Set inicial por si no coincide con los del servidor SET DATEFORMAT dmy SET DATEFIRST 1 BEGIN TRANSACTION --Borrar datos actuales, si fuese necesario --TRUNCATE TABLE FROM DI_TIEMPO --RAngo de fechas a generar: del 01/01/2020 al 31/12/2020 SELECT @FechaDesde = CAST('20200101' AS smalldatetime) SELECT @FechaHasta = CAST('20201231' AS smalldatetime) WHILE (@FechaDesde <= @FechaHasta) BEGIN SELECT @FechaAAAAMMDD = YEAR(@FechaDesde)*10000+ MONTH(@FechaDesde)*100+ DATEPART(dd, @FechaDesde) SELECT @Año = DATEPART(yy, @FechaDesde) SELECT @Trimestre = DATEPART(qq, @FechaDesde) SELECT @Semestre = CASE WHEN @Trimestre <= 2 THEN 1 ELSE 2 END SELECT @Mes = DATEPART(m, @FechaDesde) SELECT @Semana = DATEPART(wk, @FechaDesde) SELECT @Dia = RIGHT('0' + DATEPART(dd, @FechaDesde),2) SELECT @DiaSemana = DATEPART(DW, @FechaDesde) SELECT @NMes = DATENAME(mm, @FechaDesde) + '/' + RIGHT(@Año, 2) SELECT @NMes3l = LEFT(@NMes, 3) + '/' + RIGHT(@Año, 2) SELECT @NSemestre = 'S' + CAST(@Semestre as CHAR(1)) + '/' + RIGHT(@Año, 2) SELECT @NTrimestre = 'T' + CAST(@Trimestre as CHAR(1)) + '/' + RIGHT(@Año, 2) SELECT @NSemana = 'Sem ' +CAST(@Semana AS CHAR(2)) + '/' + RIGHT(RTRIM(CAST(@Año as CHAR(4))),2) SELECT @NDia = CAST(@Dia as CHAR(2)) + ' ' + RTRIM(@NMes) SELECT @NDiaSemana = DATENAME(dw, @FechaDesde) INSERT INTO dbo.DIM_TIEMPO ( FechaSK, Fecha, Anio, Semestre, Trimestre, Mes, Semana, Dia, DiaSemana, NSemestre, NTrimestre, NMes, NMes3L, NSemana, NDia, NDiaSemana ) VALUES ( @FechaAAAAMMDD, @FechaDesde, @Año, @Semestre, @Trimestre, @Mes, @Semana, @Dia, @DiaSemana, @NSemestre, @NTrimestre, @NMes, @NMes3l, @NSemana, @NDia, @NDiaSemana ) --Incremento del bucle SELECT @FechaDesde = DATEADD(DAY, 1, @FechaDesde) END COMMIT TRANSACTION
0 Comentarios:
Publicar un comentario