在Oracle中查找Next之后的星期五

时间:2019-03-14 15:52:50

标签: sql oracle date truncate

我遇到一个奇怪的情况,我需要在下一个星期五做一个DueDate。

所以如果日期是2019年3月11日星期一,那么DueDate是3月22日星期五。

我能够轻松地做到这一点:

TRUNC(Next_Day(FilingPeriod, 'FRI')) + 7 as DueDate

我的问题是当日期是2019年3月15日(星期五)时,它也应具有3月22日(星期五)的DueDate,而应具有3月29日(星期五)的DueDate。

我明白为什么。我一直在寻找一种简化方法或检查当前日期是否是星期五并从那里去的方法。

我已经寻找了一些并且阅读了类似的问题,但是我似乎还是找不到。 感谢您的帮助

2 个答案:

答案 0 :(得分:2)

只需在使用NEXT_DAY()之前从日期中减去1:

TRUNC(Next_Day(FilingPeriod - 1, 'FRI')) + 7 as DueDate

答案 1 :(得分:2)

回到星期一,即ISO周的第一天。然后再加上4,再加上7天:

TRUNC(FilingPeriod, 'iw') + 11

在旁注:我会尽可能避免使用NEXT_DAY。日期名称取决于当前的语言设置,NEXT_DAY没有参数可以覆盖此日期。这使该函数相当危险,因为它会使查询易于失败。