我有一个开始日期和一个结束日期。
Start Date: 14/06/2018
End Date: 14/06/2020
用户将填写他们两年内要进行的评论。
我已经计算出开始日期和结束日期的日期差(以周为单位)。
因此,在这种情况下,将是105周。
假设用户希望每10周进行一次审核。
因此,我将105周/他们想要进行的评论次数划分为10.5。
我想将一条记录插入数据库10次,并使日期平均分布在开始日期和结束日期之间。
我该怎么做?
更新编辑:
double test;
test = (double)Convert.ToInt32(hdnUIOID.Value) / (double)Convert.ToInt32(txtEvery.Text);
string constr = ConfigurationManager.ConnectionStrings["EBSLIVE"].ConnectionString;
SqlConnection con = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand();
var startDate = new DateTime(2018, 6, 14);
var endDate = new DateTime(2020, 6, 14);
var howManyReviews = test;
// Calculate how many days between revisions
var days = (endDate - startDate).Days / (howManyReviews - 1);
// Calculate dates of revisions
var revisionDates = new List<DateTime>() { startDate };
while ((startDate = startDate.AddDays(days)) < endDate)
revisionDates.Add(startDate);
for (int i = 0; i < test; i++)
{
try
{
string strStudentStatus = "INSERT INTO EF_REVIEWDATES(REVIEW_DATE) VALUES "+ string.Join(",", Convert.ToDateTime(revisionDates.Select(dt => "('" + dt.ToString("yyyy-MM-dd") + "')")));
cmd.CommandText = strStudentStatus.ToString();
cmd.Parameters.Clear();
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException ex)
{
string errorMsg = "Error in Insert";
errorMsg += ex.Message;
throw new System.Exception(errorMsg);
}
finally
{
con.Close();
Response.Redirect(Request.RawUrl);
}
}
答案 0 :(得分:1)
尝试下面的代码(注释中的解释):
var startDate = new DateTime(2018, 6, 14);
var endDate = new DateTime(2020, 6, 14);
var howManyReviews = 10;
// Calculate how many days between revisions
var days = (endDate - startDate).Days / (howManyReviews-1);
// Calculate dates of revisions
var revisionDates = new List<DateTime>() { startDate };
while ((startDate = startDate.AddDays(days)) < endDate)
revisionDates.Add(startDate);
要在insert
语句中使用它,可以使用:
string strStudentStatus = "INSERT INTO REVIEWDATES(REVIEW_DATE) VALUES "
+ string.Join(",", revisionDates.Select(dt => "('" + dt.ToString("yyyy-MM-dd") + "')"))
答案 1 :(得分:0)
我不确定这是否对您有用,但是我有类似的事情。因此,您需要做的是创建一个for循环,for((int i = 0; i et_.time_in = new TimeSpan(ftime.Hour, ftime.Minute, ftime.Second);
ftime = ftime.AddMinutes(increment);
et_.time_out = new TimeSpan(ftime.Hour, ftime.Minute, ftime.Second);
答案 2 :(得分:0)
您可以在SQL中尝试类似的操作:
declare
@startdate date ='14/06/2018',
@enddate date = '14/06/2020',
@weekInterval int = 10,
@Datei date
set @Datei = @startdate
while @Datei<@enddate and DATEDIFF(week,@Datei,@enddate)>@weekInterval
begin
set @Datei = DATEADD(week,@weekInterval,@Datei)
print @Datei
end
答案 3 :(得分:0)
您可以使用c#进行编码或执行完整的SQL查询,使用SQL可以执行循环或同时检索所有数据。
此答案解决了完整的SQL方法,避免了循环,并获取了要插入的数据。
它会生成递归CTE以获取间隔中的天数。然后,将每一行划分为特定的天数,并检查模数以仅过滤与所需间隔匹配的那些天。
declare @startDate datetime = '20190101', @endDate datetime = '20190301', @amount int = 7
;with recursivecte as
(
select @startDate as [day]
union all select DATEADD(day,1, [day]) as [day] from recursivecte where [day] <= @endDate
)
select allDays.[day] from
(
select [day], ROW_NUMBER() over(order by [day]) % @amount as modulus from recursivecte
) allDays where modulus = 1