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