Oracle 中的商业周刊逻辑 SQL

Business Week logic in Oracle SQL

我正在使用以下 Oracle SQL 查询来计算一周是否超过 6 个工作周。

,CASE 
WHEN to_char(next_day(CURRENT_TIMESTAMP,'sunday'),'iw')-6 <= to_char(next_day(m.COMPLETED_DT,'sunday'),'iw') THEN 'Yes'
ELSE 'No' END AS "Completed.Prior 6 Weeks"

麻烦的是这个语句没有考虑年份,所以现在是2015年,营业周为1,前一年的所有营业周都更大。

我有些还需要考虑年份,例如下面的作品,但不考虑商业周。

CURRENT_TIMESTAMP -42 >= m.COMPLETED_DT

非常感谢任何帮助

而不是使用 TO_CHAR() 来获取工作周(我认为这意味着从星期一开始的一周),您应该使用 TRUNC() - 这样可以保留年份:

, CASE WHEN TRUNC(NEXT_DAY(SYSDATE, 'sunday'), 'iw') - 42 >= 
            TRUNC(NEXT_DAY(m.COMPLETED_DT, 'sunday'), 'iw') THEN 'Yes'
  ELSE 'No' END AS "Completed.Prior 6 Weeks"

请注意,我使用 42 而不是 6,因为 Oracle 日期算法使用天数。

我不确定使用 CURRENT_TIMESTAMP 优于 SYSDATE。如果你想使用 ANSI 标准,你会想要 CURRENT_DATE ...我认为你不需要 CURRENT_TIMESTAMP 的粒度,特别是因为你正在截断它。另外,当我认为你的意思是 >= 时,你有 <= (根据你稍后在问题中的内容)。