0

我是 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
4

1 回答 1

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 =“字段”日期前十天。

于 2013-03-26T01:22:41.993 回答