如果一周超过6个星期前,我正在使用以下Oracle SQL查询。
,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
任何帮助非常感谢
答案 0 :(得分:1)
不是使用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
的粒度,特别是因为你要截断它。此外,当我认为您的意思是<=
时,您已经>=
了(根据您在问题后面的内容)。