【发布时间】:2019-01-04 20:33:34
【问题描述】:
我在名为TABEL1 的表中有四列YEAR1, MONTH1, YEAR2, MONTH2 和INT。我想为TABLE1 中的每一行在表TABLE2 中插入多行,其中YEAR 和MONTH 的值在YEAR 和MONTH 之间的TABLE1 列值。
Table1 是这样的:
ID YEAR1 MONTH1 YEAR2 MONTH2
------------------------------------
1 2010 11 2011 2
2 2012 10 2012 12
Table2 应该是这样的:
ID YEAR MONTH
-----------------
1 2010 11
1 2010 12
1 2011 1
1 2011 2
2 2012 10
2 2012 11
2 2012 12
我不知道我应该使用 while 循环还是只使用 select 语句。 我写了一个插入函数,但我发现我不能在用户定义的函数中使用 CRUD。
SELECT Calc(ID,YEAR1,YEAR2,MONTH1,MONTH2) FROM Table1
CREATE FUNCTION Calc(@ID INT, @YEAR1 INT, @YEAR2 INT, @PERIOD1 INT, @PERIOD2 INT)
RETURNS TINYINT
AS BEGIN
DECLARE @ID INT
DECLARE @YEAR INT
DECLARE @MONTH INT
SET @YEAR = @YEAR1
SET @MONTH = @MONTH1
WHILE (@YEAR <= @YEAR2)
WHILE (@MONTH <= @MONTH2)
INSERT INTO TABLE2 (ID,YEAR,MONTH)
VALUES (@ID,@YEAR,@MONTH)
SET @MONTH = @MONTH + 1
END
SET @YEAR = @YEAR + 1
END
RETURN 1
END
更新:
MONTH 这里不完全是月份。它实际上是SEASON,其值为1,2,3,4。
另一个问题是YEAR 和MONTH 是从波斯日期而不是公历日期中提取的,并且波斯日期在数据库中保存为NVARCHAR。
所以,我似乎不能在这里使用DATE 函数。
【问题讨论】:
标签: sql sql-server