我是T-SQL的新手并且遇到了一段代码,并且想知道是否有人可以帮助我了解正在发生的事情。代码的要点是计算下次付款的日期。
CASE
WHEN MONTH(table.field-10) < MONTH(GETDATE())
THEN CONVERT(DATE,((MONTH(GETDATE()) - MONTH(table.field-10)) *30) + (table.field))
WHEN MONTH(table.field-10) = MONTH(GETDATE())
THEN CONVERT(DATE,FA_NEXTDUE)
WHEN MONTH(table.field-10) > MONTH(GETDATE())
THEN CONVERT(DATE,(table.field) - ((MONTH(table.field-10) - MONTH(GETDATE())) *30))
END AS CurrentDueDate
答案 0 :(得分:1)
这看起来写得很糟糕,因为它使用了一个不考虑年份的“月份”功能。它似乎试图确定“字段”中的日期前十天是否与当前日期在同一个月。但是,由于没有将年份考虑在内,输出有点不稳定。
更好的方法是使用datediff函数。
CASE WHEN DATEDIFF(month, getdate(), (dateadd(day, -10, table.field))) < 0 then dateadd(month, DATEDIFF(month, getdate(), (dateadd(day, -10, table.field))), table.field)
CASE WHEN DATEDIFF(month, getdate(), (dateadd(day, -10, table.field))) = 0 then CONVERT(Date, fa_nextdue)
CASE WHEN DATEDIFF(month, getdate(), (dateadd(day, -10, table.field))) > 0 then dateadd(month, DATEDIFF(month, getdate(), (dateadd(day, -10, table.field))), table.field)
即使有这种修正,我仍怀疑产出是企业需要的。您可能希望稍微深入了解一下这些要求,看看究竟应该在这里返回什么。
FYI table.field-10 =“字段”日期前十天。