TSQL使用未来日期填充表格(不同的日期格式)

时间:2017-01-24 12:05:28

标签: sql sql-server date

我需要填写一个表格,其中包含不同的日期格式和工作日标志,从2017-01-01开始,每天一直到2020-12-31。

是否有一些存储过程可以执行此操作? (我想是非常标准的操作)。我找到了各种各样的"解决方案",但大多数看起来更像是黑客而非#34;标准操作"。

这是我需要填充表格的示例: enter image description here

3 个答案:

答案 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

返回

enter image description here