在SQL Server中计算工作周的函数

时间:2009-12-14 15:33:07

标签: c# sql sql-server

我发布了一个类似的问题,但没有得到我需要的答案我有以下sql代码,它在ac#app中构建...这段代码工作正常,除非日期范围大于1个工作周。我需要编辑代码,这样当CSIAchieved日期进入下一个工作周时,它就是SLA的“外部”。

当实现日期与目标日期在同一周内时,它在SLA内部。

if (CSILOSDate.Length > 0) {
  sql += CSILOSDate + " as [CSITarget], " +
         CSIActualDate + " as [CSIAcheived], " +
         "CASE WHEN " + CSILOSDate + " IS NULL OR " + CSIActualDate + 
                   " IS NULL THEN 'Incomplete' " +
               "WHEN " + CSIActualDate + " 
                      <= DATEADD(DAY, 6-DATEPART(WEEKDAY, " +
                      CSIActualDate + "), " + CSIActualDate + ") " + 
                   "THEN 'Inside' " +
               "WHEN " + CSIActualDate + " <= " + CSILOSDate + 
                   " THEN 'Inside' " +
               "ELSE 'Outside' " +
          "END AS [CSIStatus] ";
}

3 个答案:

答案 0 :(得分:1)

为什么不将另一个案例添加为第一个案例

"Case When DateDiff(week, '" + CSIActualDate +
      "', '" + CSILOSDate + "') > 0 Then 'Outside'" 
+  --- then the rest of the cases ... 

答案 1 :(得分:0)

首先,我建议您使用参数化查询。

另外,这一行:

WHEN CSIActualDate <= DATEADD(DAY, 6-DATEPART(WEEKDAY, CSIActualDate), CSIActualDate)
     THEN 'Inside'

实际上是:

WHEN CSIActualDate <= DATEADD(DAY, 6-DATEPART(WEEKDAY, CSILOSDate), CSILOSDate)
     THEN 'Inside'

答案 2 :(得分:0)

if (CSILOSDate.Length > 0)
        {
            sql +=
                CSILOSDate + " as [CSITarget], " +
                CSIActualDate + " as [CSIAcheived], " +
                "CASE WHEN DATEDIFF(WEEK, " + CSILOSDate + ", " + CSIActualDate + ") > 0 Then 'Outside'" +
                "WHEN " + CSILOSDate + " IS NULL OR " + CSIActualDate + " IS NULL THEN 'Incomplete' " +
                "WHEN " + CSIActualDate + " <= DATEADD(DAY, 6-DATEPART(WEEKDAY, " + CSIActualDate + "), " + CSIActualDate + ") " +
                "THEN 'Inside' " +
                "WHEN " + CSIActualDate + " <= " + CSILOSDate + " THEN 'Inside' " +
                "END AS [CSIStatus] ";