MySQL创建与填充日历表脚本及过程

需积分: 4 0 下载量 153 浏览量 更新于2024-08-03 收藏 5KB TXT 举报
创建一个名为`m_dim_day`的日历表并在MySQL中填充数据,通过调用存储过程`f_m_dim_day`初始化日历表,包含年、月、日、星期、季度等信息,并对指定年份的数据进行更新。 在MySQL数据库中,建立日历表是常见的需求,用于存储日期相关的元数据,便于在数据分析或业务处理中快速查询和关联。`m_dim_day`表就是一个典型的日历维度表,包含了日期相关的多种属性: 1. `dt`: 存储日期的字符串形式,如'YYYY-MM-DD'。 2. `dt2`: 可能是另一种日期表示形式,可能是与`dt`相同的格式。 3. `yr`: 年份,字符串形式。 4. `mm`: 月份,字符串形式。 5. `dd`: 日期,字符串形式。 6. `dayofweek`: 星期几,字符串形式。 7. `weeknum`: 该日期在当年的周数,字符串形式。 8. `qr`: 季度,字符串形式。 9. `bourse_week`: 可能是交易周的标识,可能与常规的周有所不同。 10. `yrmm`: 年月组合,字符串形式。 11. `week_begin`: 该周的开始日期,字符串形式。 12. `week_end`: 该周的结束日期,字符串形式。 13. `PRIMARY KEY (`dt`): 将`dt`设置为主键,确保每个日期的唯一性。 创建表`m_dim_day`的SQL语句使用了`CREATE TABLE`,定义了各个字段的数据类型和默认值,并设置了`InnoDB`引擎和`utf8`字符集。 存储过程`f_m_dim_day`用于初始化或更新指定年份的日历表数据。它接受一个年份作为输入参数(`inyear`),并执行以下操作: 1. 声明变量`i`、`start_date`和`end_date`。 2. 初始化`start_date`为当年的第一天,`end_date`为下一年的第一天。 3. 删除已有该年份的数据,以确保每次只保留最新一年的数据。 4. 计算`end_date`和`start_date`之间的日期差`date_count`,即当年的总天数。 5. 使用`WHILE`循环逐天插入数据,`i`从0递增到`date_count-1`。 6. 在循环内部,利用`DATE_FORMAT`和`STR_TO_DATE`函数将日期格式化,并插入到`m_dim_day`表中。 这个存储过程确保了日历表的完整性和时效性,可以根据需要定期调用来更新数据。在实际应用中,这样的日历表可以极大地提高查询效率,尤其是在处理时间序列数据时,例如统计每周、每月或每年的销售数据等。