SQL函数来填充一个简单的日期表

问题描述:

我需要用简单的(年,月,日)列填充一个表,长达10年,我大致每个月有30天。它看起来像下面。SQL函数来填充一个简单的日期表

我已经写了下面的代码来填充表,但我有错误的第二“而”它说“期待‘(’,或选择”。任何线索,为什么?

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) 
      @[email protected]+1 
     ) 
       @month+1 
     ) 
     @year = @year+1 
     ) 
     ) 
+1

你有一个额外的')' – TheGameiswar

+0

'而(@day

+0

@TheGameiswar,啊!我删除了最后一个额外的)仍然有同样的错误。 – SKa

随着特设理货表的帮助和交叉联接(或两个)

你的样品是有点不清楚。这是假设日子列不是1-30 BU t 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

+0

谢谢,约翰。我可能从来没有想出这个解决方案。这正是我需要的。我认为我们每年可以处理360天。 – SKa

+0

@SKa很高兴帮助。两件事情。 1)从不是一个大字2)尝试思考SQL中的数据集而不是线性处理。 –

+0

@SKa每月和/或每年的实际日子的小调整只需让我知道 –

似乎将是一个更容易使用一个循环,而不是3

Declare @D DateTime; 

Set @D = GetDate(); 

while @D < DateAdd(Year, 10, GetDate()) 
    Begin 

     Insert Into simple_table(Year, Month, Day) Select Year(@D), Month(@D), Day(@D) 

     Set @D = DateAdd(Day, 1, @D) 

    End 

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

+0

谢谢@G Mastros。我需要一张普通桌子。如果我需要生成给定年份的日期表,这是一段很好的代码。 – SKa