SQL函数来填充一个简单的日期表
我需要用简单的(年,月,日)列填充一个表,长达10年,我大致每个月有30天。它看起来像下面。SQL函数来填充一个简单的日期表
我已经写了下面的代码来填充表,但我有错误的第二“而”它说“期待‘(’,或选择”。任何线索,为什么?
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-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
收益摊销时间表
谢谢,约翰。我可能从来没有想出这个解决方案。这正是我需要的。我认为我们每年可以处理360天。 – SKa
@SKa很高兴帮助。两件事情。 1)从不是一个大字2)尝试思考SQL中的数据集而不是线性处理。 –
@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
基本上,只需使用日期作为循环变量,每次循环增加一天。额外的好处是,你每个月都能得到正确的天数(包括闰年)。
谢谢@G Mastros。我需要一张普通桌子。如果我需要生成给定年份的日期表,这是一段很好的代码。 – SKa
你有一个额外的')' – TheGameiswar
'而(@day
@TheGameiswar,啊!我删除了最后一个额外的)仍然有同样的错误。 – SKa