我发布了一个类似的问题,但没有得到我需要的答案我有以下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] ";
}
答案 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] ";