随着公司业务给规模越来越大,各级领导和销售部门、业务主管对各类业务数据报表的需求也越来越多,越来越复杂,针对这种情况,为了更好的处理好各类数据的简单分析,我建立了一张较为完善的日期定义表,现将过程与大家共同分享,还请大家提出不足和意见。

在这张表中,我将每一个日期划分出不同的年度、季度、月度、星期等内容,这样在对业务数据进行统计时,只要业务日期匹配,再来选择相应的统计时段就可以很快的得到数据,而不需要在SQL语句中再进行year/month/day/quarter等计算,加快了运算速度。如果以此表为主表,与其他表进行外接连时,还可以直观的显示出无销售收入的日期,避免日期跳行。同时,我还在表中加入了农历日期,方便进行传统农历时段的销售统计(春节、中秋等),而且在开发前端程序的时候,可以直接引用表中的农历日期,不需要再找其他的算法。

首先,建一张基础数据表,内容如下:

CREATE TABLE [dbo].[date_def]([count_id] [int] IDENTITY(1,1) NOT NULL,[count_date] [datetime] NOT NULL,[count_year] [smallint] NULL,[count_quarter] [tinyint] NULL,[count_month] [tinyint] NULL,[count_week] [tinyint] NULL,[count_weekday] [tinyint] NULL,[count_day] [smallint] NULL,[chinese_year] [varchar](10) NULL,[lunar_year] [varchar](10) NULL,[lunar_date] [varchar](10) NULL,[work_day] [bit] NULL,CONSTRAINT [PK_date_def] PRIMARY KEY CLUSTERED
([count_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]CREATE UNIQUE INDEX Idx_date_def ON date_def(count_date)

接下来,在基础数据表中插入我们需要的日期值,我们先插入从1999年到2012年的日期数据。

declare @startdate datetime,@enddate datetime
set @startdate='1999-01-01'
set @enddate='2003-12-31'insert into date_def (count_date)
select convert(varchar(10),dateadd(day,number,@startdate),120)
frommaster..spt_values
where datediff(day,dateadd(day,number,@startdate), @enddate)>=0and number>=0 and type='p'

大家可能会发现一个问题,我上次说的是插入的是从1999年到2012年的数据,但代码只是从1999到2003年,实际上,我们插入日期的时候,利用了master..spt_values表中的顺序数,但这个表中只有2048个顺序号,因此我们只能每5年一个单位的进行插入,从1999到2003,然后2004到2008,最后2009到2012,完成插入的过程。

下面这一步就很简单了,将每一个日期值的年度、季度、月份、星期、星期几、第几天这些信息分离出来。此处要注意的一定是,西方人习惯于星期天做为一周的第一天,而中国更习惯以星期一来做为一周的开始,因此就需要调整一个参数。如果你不需要调整这个参数的话,就要注意下面的工作日的设定了。

-- 设定星期一为每周的第一天,默认为星期天为每周第一天
SET   DATEFIRST   1update date_def
set count_year = year(count_date),count_quarter = datepart(qq,count_date),
count_month = month(count_date),count_week = datepart(week,count_date),
count_day = datepart(dy,count_date),count_weekday = datepart(weekday,count_date)
-- 默认除周六周日外都是工作日,如你不需要修改每周第一天,此处就要修改
update date_def
set work_day = case when count_weekday between 6 and 7 then 0 else 1 end
实际上这只是一个很简单的工作日设定,每年底还要根据国务院发布的次年休假时间表来确认第二年的工作日情况,有个默认值也是为了方便其他不需要修改的地方。点击下载1999年到2012年的真实工作日的数据。

下一步就是填充三个农历字段的内容了,一些代码是从网上找到少许修改的,在此要谢谢提供代码的各位前辈了。

先建立一张农历的基础数据表:

 CREATE TABLE SolarData (yearid decimal(16, 0),data char(7),dataint decimal(16, 0));
INSERT INTO SolarData VALUES (1900, '0x04bd8', 19416);
INSERT INTO SolarData VALUES (1901, '0x04ae0', 19168);
INSERT INTO SolarData VALUES (1902, '0x0a570', 42352);
INSERT INTO SolarData VALUES (1903, '0x054d5', 21717);
INSERT INTO SolarData VALUES (1904, '0x0d260', 53856);
INSERT INTO SolarData VALUES (1905, '0x0d950', 55632);
INSERT INTO SolarData VALUES (1906, '0x16554', 91476);
INSERT INTO SolarData VALUES (1907, '0x056a0', 22176);
INSERT INTO SolarData VALUES (1908, '0x09ad0', 39632);
INSERT INTO SolarData VALUES (1909, '0x055d2', 21970);
INSERT INTO SolarData VALUES (1910, '0x04ae0', 19168);
INSERT INTO SolarData VALUES (1911, '0x0a5b6', 42422);
INSERT INTO SolarData VALUES (1912, '0x0a4d0', 42192);
INSERT INTO SolarData VALUES (1913, '0x0d250', 53840);
INSERT INTO SolarData VALUES (1914, '0x1d255', 119381);
INSERT INTO SolarData VALUES (1915, '0x0b540', 46400);
INSERT INTO SolarData VALUES (1916, '0x0d6a0', 54944);
INSERT INTO SolarData VALUES (1917, '0x0ada2', 44450);
INSERT INTO SolarData VALUES (1918, '0x095b0', 38320);
INSERT INTO SolarData VALUES (1919, '0x14977', 84343);
INSERT INTO SolarData VALUES (1920, '0x04970', 18800);
INSERT INTO SolarData VALUES (1921, '0x0a4b0', 42160);
INSERT INTO SolarData VALUES (1922, '0x0b4b5', 46261);
INSERT INTO SolarData VALUES (1923, '0x06a50', 27216);
INSERT INTO SolarData VALUES (1924, '0x06d40', 27968);
INSERT INTO SolarData VALUES (1925, '0x1ab54', 109396);
INSERT INTO SolarData VALUES (1926, '0x02b60', 11104);
INSERT INTO SolarData VALUES (1927, '0x09570', 38256);
INSERT INTO SolarData VALUES (1928, '0x052f2', 21234);
INSERT INTO SolarData VALUES (1929, '0x04970', 18800);
INSERT INTO SolarData VALUES (1930, '0x06566', 25958);
INSERT INTO SolarData VALUES (1931, '0x0d4a0', 54432);
INSERT INTO SolarData VALUES (1932, '0x0ea50', 59984);
INSERT INTO SolarData VALUES (1933, '0x06e95', 28309);
INSERT INTO SolarData VALUES (1934, '0x05ad0', 23248);
INSERT INTO SolarData VALUES (1935, '0x02b60', 11104);
INSERT INTO SolarData VALUES (1936, '0x186e3', 100067);
INSERT INTO SolarData VALUES (1937, '0x092e0', 37600);
INSERT INTO SolarData VALUES (1938, '0x1c8d7', 116951);
INSERT INTO SolarData VALUES (1939, '0x0c950', 51536);
INSERT INTO SolarData VALUES (1940, '0x0d4a0', 54432);
INSERT INTO SolarData VALUES (1941, '0x1d8a6', 120998);
INSERT INTO SolarData VALUES (1942, '0x0b550', 46416);
INSERT INTO SolarData VALUES (1943, '0x056a0', 22176);
INSERT INTO SolarData VALUES (1944, '0x1a5b4', 107956);
INSERT INTO SolarData VALUES (1945, '0x025d0', 9680);
INSERT INTO SolarData VALUES (1946, '0x092d0', 37584);
INSERT INTO SolarData VALUES (1947, '0x0d2b2', 53938);
INSERT INTO SolarData VALUES (1948, '0x0a950', 43344);
INSERT INTO SolarData VALUES (1949, '0x0b557', 46423);
INSERT INTO SolarData VALUES (1950, '0x06ca0', 27808);
INSERT INTO SolarData VALUES (1951, '0x0b550', 46416);
INSERT INTO SolarData VALUES (1952, '0x15355', 86869);
INSERT INTO SolarData VALUES (1953, '0x04da0', 19872);
INSERT INTO SolarData VALUES (1954, '0x0a5d0', 42448);
INSERT INTO SolarData VALUES (1955, '0x14573', 83315);
INSERT INTO SolarData VALUES (1956, '0x052d0', 21200);
INSERT INTO SolarData VALUES (1957, '0x0a9a8', 43432);
INSERT INTO SolarData VALUES (1958, '0x0e950', 59728);
INSERT INTO SolarData VALUES (1959, '0x06aa0', 27296);
INSERT INTO SolarData VALUES (1960, '0x0aea6', 44710);
INSERT INTO SolarData VALUES (1961, '0x0ab50', 43856);
INSERT INTO SolarData VALUES (1962, '0x04b60', 19296);
INSERT INTO SolarData VALUES (1963, '0x0aae4', 43748);
INSERT INTO SolarData VALUES (1964, '0x0a570', 42352);
INSERT INTO SolarData VALUES (1965, '0x05260', 21088);
INSERT INTO SolarData VALUES (1966, '0x0f263', 62051);
INSERT INTO SolarData VALUES (1967, '0x0d950', 55632);
INSERT INTO SolarData VALUES (1968, '0x05b57', 23383);
INSERT INTO SolarData VALUES (1969, '0x056a0', 22176);
INSERT INTO SolarData VALUES (1970, '0x096d0', 38608);
INSERT INTO SolarData VALUES (1971, '0x04dd5', 19925);
INSERT INTO SolarData VALUES (1972, '0x04ad0', 19152);
INSERT INTO SolarData VALUES (1973, '0x0a4d0', 42192);
INSERT INTO SolarData VALUES (1974, '0x0d4d4', 54484);
INSERT INTO SolarData VALUES (1975, '0x0d250', 53840);
INSERT INTO SolarData VALUES (1976, '0x0d558', 54616);
INSERT INTO SolarData VALUES (1977, '0x0b540', 46400);
INSERT INTO SolarData VALUES (1978, '0x0b5a0', 46496);
INSERT INTO SolarData VALUES (1979, '0x195a6', 103846);
INSERT INTO SolarData VALUES (1980, '0x095b0', 38320);
INSERT INTO SolarData VALUES (1981, '0x049b0', 18864);
INSERT INTO SolarData VALUES (1982, '0x0a974', 43380);
INSERT INTO SolarData VALUES (1983, '0x0a4b0', 42160);
INSERT INTO SolarData VALUES (1984, '0x0b27a', 45690);
INSERT INTO SolarData VALUES (1985, '0x06a50', 27216);
INSERT INTO SolarData VALUES (1986, '0x06d40', 27968);
INSERT INTO SolarData VALUES (1987, '0x0af46', 44870);
INSERT INTO SolarData VALUES (1988, '0x0ab60', 43872);
INSERT INTO SolarData VALUES (1989, '0x09570', 38256);
INSERT INTO SolarData VALUES (1990, '0x04af5', 19189);
INSERT INTO SolarData VALUES (1991, '0x04970', 18800);
INSERT INTO SolarData VALUES (1992, '0x064b0', 25776);
INSERT INTO SolarData VALUES (1993, '0x074a3', 29859);
INSERT INTO SolarData VALUES (1994, '0x0ea50', 59984);
INSERT INTO SolarData VALUES (1995, '0x06b58', 27480);
INSERT INTO SolarData VALUES (1996, '0x055c0', 21952);
INSERT INTO SolarData VALUES (1997, '0x0ab60', 43872);
INSERT INTO SolarData VALUES (1998, '0x096d5', 38613);
INSERT INTO SolarData VALUES (1999, '0x092e0', 37600);
INSERT INTO SolarData VALUES (2000, '0x0c960', 51552);
INSERT INTO SolarData VALUES (2001, '0x0d954', 55636);
INSERT INTO SolarData VALUES (2002, '0x0d4a0', 54432);
INSERT INTO SolarData VALUES (2003, '0x0da50', 55888);
INSERT INTO SolarData VALUES (2004, '0x07552', 30034);
INSERT INTO SolarData VALUES (2005, '0x056a0', 22176);
INSERT INTO SolarData VALUES (2006, '0x0abb7', 43959);
INSERT INTO SolarData VALUES (2007, '0x025d0', 9680);
INSERT INTO SolarData VALUES (2008, '0x092d0', 37584);
INSERT INTO SolarData VALUES (2009, '0x0cab5', 51893);
INSERT INTO SolarData VALUES (2010, '0x0a950', 43344);
INSERT INTO SolarData VALUES (2011, '0x0b4a0', 46240);
INSERT INTO SolarData VALUES (2012, '0x0baa4', 47780);
INSERT INTO SolarData VALUES (2013, '0x0ad50', 44368);
INSERT INTO SolarData VALUES (2014, '0x055d9', 21977);
INSERT INTO SolarData VALUES (2015, '0x04ba0', 19360);
INSERT INTO SolarData VALUES (2016, '0x0a5b0', 42416);
INSERT INTO SolarData VALUES (2017, '0x15176', 86390);
INSERT INTO SolarData VALUES (2018, '0x052b0', 21168);
INSERT INTO SolarData VALUES (2019, '0x0a930', 43312);
INSERT INTO SolarData VALUES (2020, '0x07954', 31060);
INSERT INTO SolarData VALUES (2021, '0x06aa0', 27296);
INSERT INTO SolarData VALUES (2022, '0x0ad50', 44368);
INSERT INTO SolarData VALUES (2023, '0x05b52', 23378);
INSERT INTO SolarData VALUES (2024, '0x04b60', 19296);
INSERT INTO SolarData VALUES (2025, '0x0a6e6', 42726);
INSERT INTO SolarData VALUES (2026, '0x0a4e0', 42208);
INSERT INTO SolarData VALUES (2027, '0x0d260', 53856);
INSERT INTO SolarData VALUES (2028, '0x0ea65', 60005);
INSERT INTO SolarData VALUES (2029, '0x0d530', 54576);
INSERT INTO SolarData VALUES (2030, '0x05aa0', 23200);
INSERT INTO SolarData VALUES (2031, '0x076a3', 30371);
INSERT INTO SolarData VALUES (2032, '0x096d0', 38608);
INSERT INTO SolarData VALUES (2033, '0x04bd7', 19415);
INSERT INTO SolarData VALUES (2034, '0x04ad0', 19152);
INSERT INTO SolarData VALUES (2035, '0x0a4d0', 42192);
INSERT INTO SolarData VALUES (2036, '0x1d0b6', 118966);
INSERT INTO SolarData VALUES (2037, '0x0d250', 53840);
INSERT INTO SolarData VALUES (2038, '0x0d520', 54560);
INSERT INTO SolarData VALUES (2039, '0x0dd45', 56645);
INSERT INTO SolarData VALUES (2040, '0x0b5a0', 46496);
INSERT INTO SolarData VALUES (2041, '0x056d0', 22224);
INSERT INTO SolarData VALUES (2042, '0x055b2', 21938);
INSERT INTO SolarData VALUES (2043, '0x049b0', 18864);
INSERT INTO SolarData VALUES (2044, '0x0a577', 42359);
INSERT INTO SolarData VALUES (2045, '0x0a4b0', 42160);
INSERT INTO SolarData VALUES (2046, '0x0aa50', 43600);
INSERT INTO SolarData VALUES (2047, '0x1b255', 111189);
INSERT INTO SolarData VALUES (2048, '0x06d20', 27936);
INSERT INTO SolarData VALUES (2049, '0x0ada0', 44448);
然后加入一个函数,农历日期就用这个函数来求出,对于原始的代码,我修改了一个地方,把“十一月”、“十二月”分别改成了“冬月”和“腊月”,对齐一点,好看,哈哈。
-- 功能:计算阳历1900/01/31 - 2050/01/22间某一天对应的阴历是多少
-- 算法:在一张表中用10进制格式保存某个农历年每月大小,有无闰月,闰月大小信息
-- 1.用12个2进制位来表示某个农历年每月的大小,大月记为1,否则为0
-- 2.用低4位来表示闰月的月份,没有闰月记为0
-- 3.用一个高位表示闰月的大小,闰月大记为0,闰月小或无闰月记为0
-- 4.再将该2进制数转化为10进制,存入表中
-- 农历2000年: 0 110010010110 0000 -> 0x0c960 -> 51552
-- 农历2001年: 0 110110010101 0100 -> 0x0d954 -> 55636
-- 采用查表的方式计算出农历日期
-- 作者:Angel_XJWcreate function dbo.fn_cnyear(@solarday datetime)
returns nvarchar(30)
as
begin      declare @soldata int      declare @offset int      declare @ilunar int      declare @i int       declare @j int       declare @ydays int      declare @mdays int      declare @mleap int  declare @mleap1 int    declare @mleapnum int      declare @bleap smallint      declare @temp int      declare @year nvarchar(10)       declare @month nvarchar(10)      declare @day nvarchar(10)  declare @chinesenum nvarchar(10)         declare @outputdate nvarchar(30)       set @offset=datediff(day,'1900-01-30',@solarday)      --确定农历年开始      set @i=1900      --set @offset=@soldata      while @i<2050 and @offset>0      begin      set @ydays=348      set @mleapnum=0      select @ilunar=dataint from solardata where yearid=@i      --传回农历年的总天数      set @j=32768      while @j>8      begin      if @ilunar & @j >0      set @ydays=@ydays+1      set @j=@j/2      end      --传回农历年闰哪个月 1-12 , 没闰传回 0      set @mleap = @ilunar & 15      --传回农历年闰月的天数 ,加在年的总天数上      if @mleap > 0      begin      if @ilunar & 65536 > 0      set @mleapnum=30      else       set @mleapnum=29           set @ydays=@ydays+@mleapnum      end      set @offset=@offset-@ydays      set @i=@i+1      end      if @offset <= 0      begin      set @offset=@offset+@ydays      set @i=@i-1      end      --确定农历年结束        set @year=@i      --确定农历月开始      set @i = 1      select @ilunar=dataint from solardata where yearid=@year    --判断那个月是润月      set @mleap = @ilunar & 15  set @bleap = 0     while @i < 13 and @offset > 0      begin      --判断润月      set @mdays=0      if (@mleap > 0 and @i = (@mleap+1) and @bleap=0)      begin--是润月      set @i=@i-1      set @bleap=1 set @mleap1= @mleap              --传回农历年闰月的天数      if @ilunar & 65536 > 0      set @mdays = 30      else       set @mdays = 29      end      else      --不是润月      begin      set @j=1      set @temp = 65536       while @j<=@i      begin      set @temp=@temp/2      set @j=@j+1      end      if @ilunar & @temp > 0      set @mdays = 30      else      set @mdays = 29      end      --解除润月    if @bleap=1 and @i= (@mleap+1)    set @bleap=0    set @offset=@offset-@mdays      set @i=@i+1      end      if @offset <= 0      begin      set @offset=@offset+@mdays      set @i=@i-1      end      --确定农历月结束        set @month=@i    --确定农历日结束        set @day=ltrim(@offset) --输出日期set @chinesenum= N'〇一二三四五六七八九十'   while len(@year)>0select @outputdate=isnull(@outputdate,'')+ substring(@chinesenum,left(@year,1)+1,1), @year=stuff(@year,1,1,'')set @outputdate=@outputdate+ N'年'+ case @mleap1 when @month then N'润' else '' endif cast(@month as int)<10set @outputdate=@outputdate + case @month when 1 then N'正'else substring(@chinesenum,left(@month,1)+1,1) endelse if cast(@month as int)>=10set @outputdate=@outputdate+ case @month when '10' then N'十' when 11 then N'冬' else N'腊' end set @outputdate=@outputdate + N'月'if cast(@day as int)<10set @outputdate=@outputdate + N'初'+ substring(@chinesenum,left(@day,1)+1,1)else if @day between '10' and '19'set @outputdate=@outputdate+ case @day when '10' then N'初十' else N'十'+substring(@chinesenum,right(@day,1)+1,1) endelse if @day between '20' and '29'set @outputdate=@outputdate+ case @day when '20' then N'二十' else N'廿' end+ case @day when '20' then N'' else substring(@chinesenum,right(@day,1)+1,1) endelse set @outputdate=@outputdate+N'三十'return @outputdate
END
go
现在我们就可以利用这个函数填充二个农历字段了,分别是chinese_year和lunar_date,因为lunar_year我是准备留用生肖年份(天干地支)用的。
-- 计算农历年份、日期
update date_def
set chinese_year = substring(dbo.fn_cnyear(count_date),1,4),
lunar_date = substring(dbo.fn_cnyear(count_date),6,4)

这一步是最慢的,我的服务器上跑了1分15秒才出来,可能是因为每一个日期都要进行二次函数计算吧,这也是为什么我们需要一张日期定义表的原因了。最后一步,填充生肖年份,这个代码好像没有现成的,我自己google了一下,写了个小算法,正确是正确了,但可能效率不怎么样,大家就将就点看吧,希望大家提出更好的方法。

create table #temp1
(flag char(1),
ys smallint,
tgdz varchar(2)
)
insert into #temp1
select 'T',4,'甲'
union all select 'T',5,'乙'
union all select 'T',6,'丙'
union all select 'T',7,'丁'
union all select 'T',8,'戊'
union all select 'T',9,'已'
union all select 'T',0,'庚'
union all select 'T',1,'辛'
union all select 'T',2,'壬'
union all select 'T',3,'癸'
union all select 'D',4,'子'
union all select 'D',5,'丑'
union all select 'D',6,'寅'
union all select 'D',7,'卯'
union all select 'D',8,'辰'
union all select 'D',9,'巳'
union all select 'D',10,'午'
union all select 'D',11,'未'
union all select 'D',0,'申'
union all select 'D',1,'酉'
union all select 'D',2,'戍'
union all select 'D',3,'亥'declare @year_begin int
declare @year_end int
declare @lunar_newyear datetime
select @year_begin = min(count_year) from date_def
select @year_end = max(count_year) from date_defwhile @year_end >= @year_begin
beginselect @lunar_newyear = count_date from date_defwhere count_year = @year_beginand lunar_date = '正月初一'update date_def set lunar_year = b.tgdz+c.tgdz+'年'from #temp1 b,#temp1 cwhere count_year%12 = c.ysand c.flag = 'D'and count_year%10 = b.ysand b.flag = 'T'and count_year = @year_beginand count_date >= @lunar_newyearupdate date_def set lunar_year = b.tgdz+c.tgdz+'年'from #temp1 b,#temp1 c  where (count_year-1)%12 = c.ysand c.flag = 'D'and (count_year-1)%10 = b.ysand b.flag = 'T'and count_year = @year_beginand count_date < @lunar_newyear  set @year_begin = @year_begin + 1
end
drop table #temp1
注意了,农历的年份和公历可不一定相同的,公历2012年1月9日对应的农历可是二〇一一年辛卯年腊月十六,2012年2月9日对应的农历才是二〇一二年壬辰年正月十八。
好了,这个日期定义表到这里除了需要每年手工修改一次的工作日定义外,就已经全部完工了。我们就可以在以后的日子里,利用这张表去统计一大堆业务部门喜闻乐见,但不知道他们会不会真正用的上的数据吧。

转载于:https://www.cnblogs.com/vvian/archive/2012/02/22/2363867.html

建立完善的日期定义表相关推荐

  1. Oracle编程入门经典 第3章 建立以及管理用户和表

    数据定义语言(DDL). 怎样建立我们自己的用户账号. 可以用于Oracle表的不同数据类型. 怎样在表上建立约束. 怎样使用数据词典获取与数据库中对象有关的信息. 3.1 数据定义语言 DDL通常用 ...

  2. 教你用SQL生成一张带「农历」的日期维度表

    点上方关注"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 之前已经发布过使用存储过程,生存指定年份的日历表<SQL如何制作一张日历维度表&g ...

  3. PMCAFF | 创业公司产品经理如何建立完善的产品开发体系?

    创业公司的产品经理怎么建立完善的产品开发体系?具体需要哪些工作? 问题背景: 想想大家也能够猜到,对于创业公司而言,如果老板没有从事互联网产品的经验,那么大多都是指哪打哪,而对于产品的开发计划,设计流 ...

  4. 数据仓库之日期维度表构建

    导读 大家好,今日立秋,立秋是阳气渐收.阴气渐长,由阳盛逐渐转变为阴盛的转折.我们上一篇文章 数据仓库之维度表 介绍了数据仓库中维度表,本篇文章在此基础上介绍和构建维度表中的日期维度.Kimball ...

  5. 第五章 SQL定义表(一)

    文章目录 第五章 SQL定义表 表名称和架构名称 模式名称 模式命名注意事项 保留模式名 默认模式名称 `_CURRENT_USER`关键字 模式搜索路径 包含特定于平台的模式名 List模式 表名 ...

  6. python生成日期列表_PYTHON生成日期维度表

    数据仓库的定义之一是反应历史变化,数据或多或少都会包含时间特征,因此日期维度就成了数据仓库中不可或缺的维度之一,可以说在任何一个事实表中都会有一个或者多个日期维度的外键.日期维度可以尽可能多的包含日期 ...

  7. slq语句定义表以及对表的删除、修改

    sql语句定义表以及对表的删除.修改 创建数据库:学生选课数据库 这一步可以使用图形化界面生成 登录数据库之后,在"对象资源管理器"一栏中选择数据库,右击选择"新建数据库 ...

  8. hive生成日期维度表Hql

    hive生成日期维度表 利用现有的函数,生成维度表 表结构 日期key 具体日期 第几月份 第几季度 年份 周几 当前周的第几天 当前月的第几天 当前年的第几天 当前年的第几周 当前周的第一天 当前周 ...

  9. 公司 表名规则 TN基础表 TR关系表 TL定义表

    公司 表名规则  TN基础表  TR关系表  TL定义表

  10. 1.18.5.流式概念、动态表(Dynamic Table)、DataStream上的关系查询、动态表 连续查询(Continuous Query)、在流上定义表、处理时间

    1.18.5.流式概念 1.18.5.1.动态表(Dynamic Table) 1.18.5.1.1.DataStream上的关系查询 1.18.5.1.2.动态表 & 连续查询(Contin ...

最新文章

  1. Bash之break、continue和return命令在循环中的作用
  2. Centos7.4 版本环境下安装Mysql5.7操作记录
  3. thinkbook14 2021款电脑买来后发现:关机后电源指示灯仍然是亮的
  4. Greenplum添加mirror步骤
  5. ES6新特性之let和const命令
  6. sqlserver2008r2安装
  7. iOS c语言 基本运算符
  8. 数据结构:二叉排序树
  9. jsTree插件简介(三)
  10. ViewController的生命周期你真的懂了吗?
  11. u-boot中断功能初步分析之---------按键中断
  12. java实习日志_Java毕业生校外实习日记
  13. 如何使用SLM生成涡旋光束
  14. go语言暂停命令_命令 · Go语言中文文档
  15. UltraCompare破解流程
  16. Python货币转换Ⅰ
  17. VMware未能启动虚拟机解决方法
  18. 树结构的所有特性(二叉树 完全二叉树 红黑树 btree b+tree)
  19. html实现文字滚动
  20. 2021 年春招面试攻略来了。。。

热门文章

  1. storage相关网站
  2. Comparator 比较器接口
  3. mysql行转列sql函数_(转)行变列SQL语句(MSSQL) - jack - 博客园
  4. Unity的序列化机制探索
  5. 排序 --- 6.2 Merge Two Sorted Lists || 6.3 Merge k Sorted Lists --- 图解
  6. idea集成testng_idea安装testng插件后,无法使用调用testng里面的类
  7. Collectors.averagingLong()
  8. Centos 7 mini安装
  9. Liunx系统下的 Nginx的安装与启动
  10. vasp如何杀掉任务_如何优雅地在学堂路上骑着车跑代码