首页 > 解决方案 > 如何获得当前周的前一周?

问题描述

我正在尝试将已开始任务的周数与当前任务的前一周进行比较。

and to_char(t.plan_start_dttm, 'YYYY-IW') = to_char(sysdate-1, 'YYYY-IW')

所以昨天,它工作得很好,我得到了上周的所有记录。但是今天,我得到了本周的。显然,我的“sysdate -1 不是正确的方法。谢谢

标签: sqloracle

解决方案


昨天,它工作正常,我得到了上周的所有记录。

昨天是本周的星期一;因此减去一天将是上周的星期日,而截断到一周的开始将是上周的星期一。

今天是星期二; 所以减去一天将是本周的星期一,然后截断到本周的开始仍然是本周。

相反,减去一整周的天数 (7):

and t.plan_start_dttm >= TRUNC( sysdate - 7, 'IW')
and t_plan_start_dttm <  TRUNC( sysdate, 'IW' )

plan_start_dttm如果您在一个范围内进行比较,那么 Oracle 可以在该列上使用索引;而如果您在列上使用TO_CHARTRUNC,则无法使用列索引,您将需要一个单独的基于函数的索引。


推荐阅读