我正在开发一个Web应用程序,它将允许用户输入开始日期和结束日期。因为我希望稍后在日历中显示,我相信我需要将开始日期和结束日期之间的每个日期插入到数据库表中。例如: 01/01/2012 02/01/2012 03/01/2012 04/01/2012使用ASP.NET c将日期范围插入到SQL Server中#
是否有这样做,当我刚刚开始日期和结束日期的一种简单的方法,例如01/01/2012和04/01/2012?
感谢
我正在开发一个Web应用程序,它将允许用户输入开始日期和结束日期。因为我希望稍后在日历中显示,我相信我需要将开始日期和结束日期之间的每个日期插入到数据库表中。例如: 01/01/2012 02/01/2012 03/01/2012 04/01/2012使用ASP.NET c将日期范围插入到SQL Server中#
是否有这样做,当我刚刚开始日期和结束日期的一种简单的方法,例如01/01/2012和04/01/2012?
感谢
我质疑是否有必要根据你们所要求的做到这一点,但是,这是怎么了:
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)
我建议不要使用隐式速记。例如,这不适用于'DATE'。只需输入'DATEADD',它会更安全,并且不会改变您的计费时间。 – 2012-08-13 17:11:01
因为您没有使用DATE,DATETIME2或TIME或DATETIMEOFFSET尝试隐式转换,所以您从来没有遇到过任何问题。 – 2012-08-13 17:14:28
比一个循环相反,你可以尝试:
;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;
此外,如果2000+天是不是足够大的摆动,你(注释掉INSERT
当你信任的逻辑和输出)。可能会更改为sys.all_columns
(7500+)或使用您自己的数字表。
使用一个采用开始和结束日期的存储过程,或者因为您已经在运行asp.net,只需从循环中调用INSERT即可。 – 2012-08-13 17:06:22
WHYT? (你有什么尝试?) – 2012-08-13 17:07:16
请使用明确的日期格式(例如'YYYYMMDD')。你现在进入哪个国家并不是很明显,因此无论是04/01/2012是4月1日还是1月4日。你可以通过多读一些,但为什么要这么做? – 2012-08-13 17:18:05