转换C#函数以计算到SQL Server的总周数

时间:2014-06-05 14:02:51

标签: c# sql sql-server sql-server-2008-r2

我有以下功能,可根据BillingStartDateBillingEndDate计算总周数。这是在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。

非常感谢帮助

1 个答案:

答案 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));

希望这有帮助!!!