尝试使用while循环将日期数据类型输入到表中。我的循环中断不起作用,输入值以NULL形式出现。
非常感谢帮助
DECLARE @StartDate DATE
DECLARE @countIndex INT
DECLARE @yearDate DATE
DECLARE @todaysDate DATE
SET @StartDate = GETDATE()
SET @yearDate = DATEADD(YEAR, 1,@StartDate)
CREATE TABLE DateLookup
(
DateID INT IDENTITY (1,1),
DateDescription Date
)
WHILE (DATEDIFF(DD,@StartDate, @yearDate)) <= 366
BEGIN
SET @countIndex = @countIndex +1
INSERT INTO DateLookup (DateDescription)
VALUES (DATEADD (DD,@countIndex,@todaysDate))--DAY(GETDATE()))
IF (@countIndex < 366)
Break
END
答案 0 :(得分:1)
您需要DECLARE @todaysDate DATE = getdate()
和DECLARE @countIndex INT = 0
此外,您可能需要IF (@countIndex > 365) BREAK
答案 1 :(得分:0)
你永远不会将@countIndex设置为0;它是一个NULL,这意味着当你向它添加1时它总是为NULL。与@todaysDate相同的问题。
如果你想完全避免使用WHILE循环,你可以像这样拼凑一些东西:
; WITH seed
AS ( SELECT ROW_NUMBER() OVER ( ORDER BY name ) AS n
FROM sys.columns
)
SELECT TOP 366
DATEADD(Day, n - 1, GETDATE())
FROM seed
答案 2 :(得分:0)
如果你需要做的就是在你的DateLookup表中插入接下来的365天,为什么不使用这样的东西(假设你的意思是SQL Server,取决于你的RDBMS):
INSERT INTO DateLookup (DateDescription)
SELECT DATEADD(DD,Number,GETDATE())
FROM master..spt_values
WHERE Number BETWEEN 1 AND 365 AND Type = 'P'
这是SQL Fiddle。
祝你好运。