Scripts para dimensión de fecha en MySQL
A continuación, el equivalente de la publicación de hace unos días pero para MySQL, la dimensión de fecha:
Script para la tabla
CREATE TABLE `dw`.`dim_fecha` (
`FechaSK` int(11) NOT NULL,
`Fecha` date NOT NULL,
`Anio` smallint(6) NOT NULL,
`Trimestre` smallint(6) NOT NULL,
`Mes` smallint(6) NOT NULL,
`Semana` smallint(6) NOT NULL,
`Dia` smallint(6) NOT NULL,
`DiaSemana` smallint(6) NOT NULL,
`NTrimestre` varchar(7) NOT NULL,
`NMes` varchar(15) NOT NULL,
`NMes3L` varchar(3) NOT NULL,
`NSemana` varchar(11) NOT NULL,
`NDia` varchar(15) NOT NULL,
`NDiaSemana` varchar(15) NOT NULL,
PRIMARY KEY (`FechaSK`) ) ENGINE=InnoDb DEFAULT CHARSET=latin1
Procedimiento para la carga
DROP PROCEDURE IF EXISTS `dw`.`dim_fecha`;
CREATE DEFINER=`root`@`localhost`
PROCEDURE `PROC_INSERT_DIM_FECHA`()
BEGIN delete from dim_fecha;
SELECT '2006-01-01' INTO @fi;
SELECT '2012-12-31' INTO @ff;
while (@fi <= @ff) DO INSERT INTO dim_fecha ( FechaSK, Fecha, Anio, Trimestre, Mes, Semana, Dia, DiaSemana, NTrimestre, NMes, NMes3L, NSemana, NDia, NDiaSemana ) SELECT year(@fi)*10000+month(@fi)*100+day(@fi) as FechaSK, (@fi) Fecha, year(@fi) Anio, quarter(@fi) Trimestre, month(@fi) Mes, week(@fi) Semana, RIGHT(concat('0',day(@fi)),2) Dia, weekday(@fi) DiaSemana, concat('T',quarter(@fi),'/',year(@fi))NTrimestre, monthname(@fi) NMes, LEFT(monthname(@fi),3) NMes3L, concat('Sem ',week(@fi) ,'/', year(@fi)) NSemana, concat(RIGHT(concat('0',day(@fi)),2),' ',monthname(@fi)) NDia, dayname(@fi) NDiaSemana;
set @fi = DATE_ADD(@fi, INTERVAL 1 DAY);
END WHILE;
END
Fuente DataPrix