用于填充简单日期表的SQL函数

时间:2017-04-20 13:37:08

标签: sql-server sql-server-2008

我需要用简单的(年,月,日)列填充表格长达10年,我大致每个月都要有30天。看起来如下所示。

我已经编写了下面的代码来填充表格,但我在第二个'时遇到了错误。它说'期待'('或选择'。任何线索为什么?

Simple Date table

 declare @month varchar(20)
    set @month ='1'

    declare @day varchar(20)
    set @day='1'

    declare @sql nvarchar(1000)
    while(@Year <=10)
     (
      while(@month<=12)
        ( 
          while(@day<= @day+30)
              (
               insert into simple_table values(@Year,@month,@day)
          @day=@day+1 
       )
              @month+1
       )
       @year = @year+1
       )
       )

2 个答案:

答案 0 :(得分:1)

借助 ad-hoc统计表交叉加入(或两个)

您的样本有点不清楚。这假设Day列不是1-30而是1-3600 10年。我假设你正在建立某种30/360的摊销计划

Select Year = 'Year'+cast(Y as varchar(25))
      ,Month = M
      ,Day   = Row_Number() over (Order by Y,M,D)
 From  (Select Top (10) Y=Row_Number() Over (Order By (Select NULL)) From  master..spt_values) Y
 Cross Join (Select Top (12) M=Row_Number() Over (Order By (Select NULL)) From  master..spt_values) M
 Cross Join (Select Top (30) D=Row_Number() Over (Order By (Select NULL)) From  master..spt_values) D

<强>返回

enter image description here

答案 1 :(得分:0)

似乎使用一个循环代替3会容易得多。

TransferSpreadhseet

基本上,只需使用日期作为循环变量,每次循环增加一天。额外的好处是,您可以获得每月正确的天数(包括闰年)。