我有以下功能,可根据BillingStartDate
和BillingEndDate
计算总周数。这是在C#程序中计算的,但我正在创建一个SQL查询,并希望计算此值。
这是C#功能:
private void calculateTotalWeeks()
{
if (!((dtpBillEnd.ValueIsDbNull) || (dtpBillStart.ValueIsDbNull)))
{
if (((DateTime)dtpBillEnd.Value).CompareTo((DateTime)dtpBillStart.Value) < 0)
{
lblTotalWeeks.Text = "Invalid End Date";
}
else
{
TimeSpan ts = ((DateTime)dtpBillEnd.Value).AddDays(1) - (DateTime)dtpBillStart.Value;
lblTotalWeeks.Text = ((Double)ts.TotalDays / 7.0).ToString("0.0");
if (Int32.Parse(lblTotalWeeks.Text.Substring(lblTotalWeeks.Text.Length - 1, 1)) % 2 != 0)
{
string strBase = lblTotalWeeks.Text.Substring(0, lblTotalWeeks.Text.Length - 1);
lblTotalWeeks.Text = strBase + (Int32.Parse(lblTotalWeeks.Text.Substring(lblTotalWeeks.Text.Length - 1, 1)) - 1);
}
}
}
}
这就是我认为在T-SQL中的等价物:
(DATEDIFF(D, d.BillingStartDate, DATEADD(D, 1, d.BillingEndDate)) / 7.0)
大多数情况下这适用于某些地方,例如它在开始和结束日期之间的26.0天显示3.71而不是3.6。
非常感谢帮助
答案 0 :(得分:0)
如果您希望最终结果 3周5天,那么您可以使用以下查询:
SELECT Convert(nvarchar, DATEDIFF(D, @BillingStartDate, @BillingEndDate) /7, 20) + ' weeks and' +
Convert(nvarchar, DATEDIFF(D, @BillingStartDate, @BillingEndDate) %7, 20) + ' days'
这将为您提供
的结果3 weeks and 5 days
如果日期差异为26天。
相反,如果您希望最终结果 3.5周,那么您可以使用以下查询:
SELECT Convert(nvarchar, DATEDIFF(D, @BillingStartDate, @BillingEndDate) /7, 20) + '.' + Convert(nvarchar, DATEDIFF(D, @BillingStartDate, @BillingEndDate) %7, 20) + ' weeks'
这将为您提供
的结果3.5 weeks
如果日期差异为26天。
修改强>
此外,请在此处修改您的C#代码:
lblTotalWeeks.Text = ((Double)ts.TotalDays / 7.0).ToString("0.0");
应该是
lblTotalWeeks.Text = Convert.ToString((Double)ts.TotalDays / 7.0));
希望这有帮助!!!