Функция для расчета рабочей недели в SQL Server - PullRequest
1 голос
/ 14 декабря 2009

У меня есть похожий вопрос, но я не получил нужного ответа. У меня есть следующий SQL-код, который создается в приложении ac # ... Этот код работает нормально, за исключением случаев, когда диапазон дат больше, чем 1 рабочая неделя Мне нужно отредактировать код так, чтобы когда дата достижения CSIA приходилась на следующую рабочую неделю, она находилась «вне» 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 ]

1 голос
/ 14 декабря 2009

Почему бы не добавить еще одно дело в качестве первого дела

"Case When DateDiff(week, '" + CSIActualDate +
      "', '" + CSILOSDate + "') > 0 Then 'Outside'" 
+  --- then the rest of the cases ... 
0 голосов
/ 14 декабря 2009
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] ";
0 голосов
/ 14 декабря 2009

Сначала я бы предложил использовать параметризованные запросы.

Также, если эта строка:

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

на самом деле:

WHEN CSIActualDate <= DATEADD(DAY, 6-DATEPART(WEEKDAY, CSILOSDate), CSILOSDate)
     THEN 'Inside'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...