首页 > Windows开发 > 详细

C# 生成日期维度值

时间:2019-02-21 17:19:41      阅读:207      评论:0      收藏:0      [点我收藏+]

1. 时间维度表结构

/*==============================================================*/
/* Table: dim_date_day  日期维度_天   */
/*==============================================================*/
DROP TABLE IF EXISTS dw_realestate_sales.dim_date_day;
CREATE TABLE dw_realestate_sales.dim_date_day
( 
date_key                INT            NOT NULL  DEFAULT   1                  COMMENT 维度主键,
alternate_key           DATE           NOT NULL  DEFAULT   1900-01-01         COMMENT 自然日日期值,
day_number_of_week      TINYINT                  DEFAULT   1                  COMMENT 星期中的第几天,
day_name_of_week        VARCHAR(20)              DEFAULT   ‘‘                   COMMENT 星期中名称,
day_number_of_month     TINYINT                  DEFAULT   1                  COMMENT 月份中的天序号,从1开始,
day_number_of_year      INT                      DEFAULT   1                  COMMENT 一年中的天数序号,从1开始,
week_number_of_year     TINYINT                  DEFAULT   1                  COMMENT 年中的星期序号,从1开始,
month_name              VARCHAR(20)              DEFAULT   ‘‘                   COMMENT 月份名称,
month_number_of_year    TINYINT                  DEFAULT   1                  COMMENT 月份序号,从1开始,
quarter_of_year         TINYINT                  DEFAULT   1                  COMMENT 季度序号,
year_number             INT                      DEFAULT   1                  COMMENT 公历年数字
) 
UNIQUE KEY(date_key)
DISTRIBUTED BY HASH(date_key) BUCKETS 2
properties
(
"replication_num"="3"
);

 

2. C#生成预置数据代码

  private static void generate_dim_date_data()
        {
            DateTime startDate = new DateTime(2000, 1, 1);
            DateTime endDate = new DateTime(2100, 1, 1);

            StringBuilder sb = new StringBuilder();
            GregorianCalendar gc = new GregorianCalendar();
            //int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
            //return weekOfYear;

            int linecount = 0;
            while (startDate < endDate)
            {
                // like 20050701,2005-07-01,6,Friday,1,182,27,July,7,3,2005
                sb.Append(string.Format("{0}{1:D2}{2:D2}", startDate.Year, startDate.Month, startDate.Day)).Append(,).
                   Append(startDate.ToString("yyyy-MM-dd")).Append(,).
                   Append((int)startDate.DayOfWeek+1).Append(,).
                   Append(GetWeekDayName(startDate.DayOfWeek)).Append(,).
                   Append(startDate.Day).Append(,).
                   Append(startDate.DayOfYear).Append(,).
                   Append(gc.GetWeekOfYear(startDate, CalendarWeekRule.FirstDay, DayOfWeek.Monday)).Append(,).
                   Append(GetMonthName(startDate.Month)).Append(,).
                   Append(startDate.Month).Append(,).
                   Append((startDate.Month - 1) / 3 + 1).Append(,).
                   Append(startDate.Year).AppendLine();
                linecount+=1;
                startDate = startDate.AddDays(1);
                //if (linecount == 100)
                //{
                //    Write(sb);
                //}
            }

            Write(sb);
        }

        public static void Write(StringBuilder sb)
        {
            FileStream fs = new FileStream("c:\\tmp\\dim_date.txt", FileMode.OpenOrCreate);
            //获得字节数组
            byte[] data = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
            //开始写入
            fs.Write(data, 0, data.Length);
            //清空缓冲区、关闭流
            fs.Flush();
            fs.Close();
            sb.Clear();
        }

        private static string GetWeekDayName(DayOfWeek dayofWeek)
        {
            string[] Day = new string[] {  "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
            string week = Day[Convert.ToInt32(dayofWeek.ToString("d"))].ToString();
            return week;
        }

        private static string GetMonthName(int monthNumber)
        {
            string[] monthNames = new string[] { "一月份", "二月份", "三月份", "四月份", "五月份", "六月份", "七月份", "八月份", "九月份", "十月份", "十一月份", "十二月份" };
            return monthNames[monthNumber - 1];
        }

 

3. 结果预览

 技术分享图片

 

C# 生成日期维度值

原文:https://www.cnblogs.com/lenmom/p/10413241.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!