我正在开发一个允许用户输入开始日期和结束日期的 Web 应用程序。由于我希望它稍后出现在日历中,我相信我需要将开始日期和结束日期之间的每个日期插入数据库表中。例如: 01/01/2012 02/01/2012 03/01/2012 04/01/2012
当我只有开始日期和结束日期时,是否有一种简单的方法可以做到这一点,例如 01/01/2012 和 04/01/2012?
谢谢
我正在开发一个允许用户输入开始日期和结束日期的 Web 应用程序。由于我希望它稍后出现在日历中,我相信我需要将开始日期和结束日期之间的每个日期插入数据库表中。例如: 01/01/2012 02/01/2012 03/01/2012 04/01/2012
当我只有开始日期和结束日期时,是否有一种简单的方法可以做到这一点,例如 01/01/2012 和 04/01/2012?
谢谢
而不是一个循环,你可以尝试:
;WITH x(n) AS
(
SELECT TOP (DATEDIFF(DAY, @StartDate, @EndDate) + 1)
ROW_NUMBER() OVER (ORDER BY [object_id]) - 1
FROM sys.all_objects
)
-- INSERT dbo.table_name(date_column)
SELECT DATEADD(DAY, n, DATEADD(DAY, DATEDIFF(DAY, '19000101', @StartDate), '19000101'))
FROM x;
INSERT
(当您信任逻辑和输出时,请注释掉。)
此外,如果 2000+ 天的波动不够大,您可以更改为sys.all_columns
(7500+) 或使用您自己的数字表。
我质疑是否需要根据您提出的要求执行此操作,但是,方法如下:
DECLARE @InsertDate DATETIME = @StartDate;
WHILE @InsertDate <= @EndDate
BEGIN
INSERT dbo.MyTable (Date) VALUES (@InsertDate)
SET @InsertDate = @InsertDate + 1 --SQL does implicit conversion from integer to date (1 = 1 day)
END
编辑:为了解决评论,这也是有效的(可能推荐,虽然我从来没有遇到过与 DATETIME 一起使用时的隐式转换问题)
SET @InsertDate = dateadd(d, 1, @InsertDate)