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

David Burgos

Read more posts by this author.