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
的粒度,特别是因为你正在截断它。另外,当我认为你的意思是 >=
时,你有 <=
(根据你稍后在问题中的内容)。
我正在使用以下 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
的粒度,特别是因为你正在截断它。另外,当我认为你的意思是 >=
时,你有 <=
(根据你稍后在问题中的内容)。