我需要填写一个表格,其中包含不同的日期格式和工作日标志,从2017-01-01开始,每天一直到2020-12-31。
是否有一些存储过程可以执行此操作? (我想是非常标准的操作)。我找到了各种各样的"解决方案",但大多数看起来更像是黑客而非#34;标准操作"。
答案 0 :(得分:2)
This文章将特别帮助那些在数据仓库和商业智能中工作的人。每当作为起点,他们需要设置新数据仓库,在此期间他们需要使用日期,日期键,日类型,星期名称,月份,月份名称,季度等各种值创建和填充日期维度。等
答案 1 :(得分:0)
我不相信标准的东西,已经在SQL服务器中完成了你想要的东西。
您可以创建一个程序并使用' dateadd'在循环中运行以创建所需的所有数据。
答案 2 :(得分:0)
这可能会让你入门。相对{months / weeks /...}
不是100%明确Declare @Date1 date = '2017-01-01'
Declare @Date2 date = '2020-12-31'
;with cte0(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N))
,cteD(D) As (Select Top (DateDiff(DD,@Date1,@Date2)+1) cast(DateAdd(DD,Row_Number() over (Order By (Select NULL))-1,@Date1) as date) From cte0 N1, cte0 N2, cte0 N3, cte0 N4, cte0 N5, cte0 N6) -- 1 Million
Select DateSK = cast(Format(D,'yyyyMMdd') as int)
,FullDate = cast(D as datetime)
,Day = DatePart(DD,D)
,DayName = DateName(DW,D)+', '+Format(D,'MMMM dd yyyy')
,DaySuffix = DateName(D,D)+case when DatePart(d, D) in (1,21,31) then 'st'
when DatePart(d, D) in (2,22) then 'nd'
when DatePart(d, D) in (3,23) then 'rd'
else 'th' end
,DayOfWeek = DateName(DW,D)
,DayOfWeekNumber = DatePart(DW,D)
,DayOfWeekInMonth = Dense_Rank() over (Partition By Year(D),Month(D),DatePart(DW,D) Order by D)
,DayOfYear = DatePart(DAYOFYEAR,D)
,RelativeDays = Row_Number() over (Order by D)
,WeekofYearNumber = DatePart(WEEK,D)
,WeekofMonthNumber = Dense_Rank() over (Partition By Year(D),Month(D) Order by DatePart(WEEK,D))
,RelativeWeeks = Dense_Rank() over (Order by Year(D),Month(D),DatePart(WEEK,D))
,CalendarMonthNumber = DatePart(MONTH,D)
,CalendarMonthName = DateName(MONTH,D)
,CalendarMonthShortName = Lower(Left(DateName(MONTH,D),3))
,RelativeMonths = Dense_Rank() over (Order by Year(D),Month(D))
From cteD
Order By D
返回