• Código SQL SERVER Tabla Calendario


    Utilidad.


    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

    ACCEDE A CODIGO FUENTE GRATIS

    Compartiendo código a través de una plataforma gratuita, compartiendo proyectos y codigo siempre con el lema de Educar es Compartir.

    Oficina Central

    DIRECCIÓN

    Comercial el Rey, Local B58

    CORREO

    angel@nubeclan.com
    soporte@nubeclan.com

    TELEFONO

    +591 326 4587

    MOVILES

    +591 600 07721

    EDUCAR ES COMPARTIR

    Blog

    GitHub

    REDES SOCIALES

    Facebook

    Twiter

    LinkedIn