Stored Procedure SQL Server generador de fechas Diciembre 4
El siguiente Stored Procedure nos sirve para generar fechas hasta la fecha actual. Útil para rellenar una tabla de dimensión fecha (DIM_FECHA) con los campos:
id_data: idenfitificador de la fecha en integer (ejp: 20091001)
- date: fecha en sql
- dia: dia en integer
- dia_text: texto del dia (ejp: Sábado)
- mes: mes en integer
- mes_text: mes en texto (Marzo)
- anyo: año en integer
- periode: período en integer (ejp: 200910)
CREATE PROCEDURE generar_dim_fecha AS BEGIN SET NOCOUNT ON SET XACT_ABORT ON declare @Date smalldatetime, @i int, @id_data int, @id_data_text varchar(50), @dia int, @dia_setmana int, @dia_text varchar(50), @mes int, @mes_text varchar(50), @anyo int, @periode int, @max_data_bd smalldatetime SELECT @max_data_bd = isnull(max(DATA),'2008-01-01') FROM DIM_FECHA SET @Date = '2008-01-01' IF @max_data_bd > @Date SET @Date = dateadd(d,1,@max_data_bd) SET @i = 1 while @date <= getDate() begin SET @id_data_text = CONVERT(varchar(8), @date, 112) SET @periode = SUBSTRING(@id_data_text,1,6) SET @id_data = CONVERT(varchar(8), @date, 112) SET @dia = SUBSTRING( @id_data_text,7,2) SET @mes = SUBSTRING( @id_data_text,5,2) SET @anyo = SUBSTRING( @id_data_text,1,4) SET @dia_setmana = DATEPART ( dw ,@date) SET @dia_text = CASE WHEN @dia_setmana = 1 THEN 'Domingo' WHEN @dia_setmana = 2 THEN 'Lunes' WHEN @dia_setmana = 3 THEN 'Martes' WHEN @dia_setmana = 4 THEN 'Miércoles' WHEN @dia_setmana = 5 THEN 'Jueves' WHEN @dia_setmana = 6 THEN 'Viernes' WHEN @dia_setmana = 7 THEN 'Sábado' END SET @mes_text = CASE WHEN @mes = 1 THEN 'Enero' WHEN @mes = 2 THEN 'Febrero' WHEN @mes = 3 THEN 'Marzo' WHEN @mes = 4 THEN 'Abril' WHEN @mes = 5 THEN 'Mayo' WHEN @mes = 6 THEN 'Junio' WHEN @mes = 7 THEN 'Julio' WHEN @mes = 8 THEN 'Agosto' WHEN @mes = 9 THEN 'Septiembre' WHEN @mes = 10 THEN 'Octubre' WHEN @mes = 11 THEN 'Novembre' WHEN @mes = 12 THEN 'Desembre' END /*PRINT @id_data PRINT @dia PRINT @dia_setmana PRINT @dia_text PRINT @mes PRINT @mes_text PRINT @anyo PRINT @periode*/ INSERT DIM_FECHA (id_data, DATA, dia,dia_text,mes,mes_text,anyo,periode) VALUES (@id_data,@date,@dia, @dia_text, @mes, @mes_text, @anyo, @periode) SET @i = @i + 1 SET @Date = DateAdd(d, 1, @Date) end END
