oracle - 前 2 个工作日的 Oracle 查询
问题描述
我们使用的是 Oracle 11。我们有一个表 DateRanges,通过执行以下查询为我们提供了前一个工作日:
SELECT START_DATE FROM DateRanges WHERE ID = 14
--> START_DATE 是前一个工作日(在上面的示例中,START_DATE = 1/24/19
我们有一个带有日期列 (LIQ.UPD_DT) 的表,我们需要在表 LIQ 和 SEC 查询之间进行左连接,其中 LIQ.UPD_DT > 前 2 个工作日。
例如:今天是 19 年 1 月 25 日。
前 2 个工作日是 2019 年 1 月 23 日。
我们如何做这个查询?(我需要将 (+)= 用于 LEFT JOIN,因为我将此查询提供给的应用程序不执行 LEFT JOIN 语法):
WHERE LIQ.ID (+)= SEC.ID AND LIQ.UPD_DT (+) >= '{2 previous business day}'
谢谢你。
解决方案
在 Oracle 中,您可以在日期中添加和减去天数(及其分数)。所以今天是 sysdate,包括日期和时间,所以你不关心时间然后“> trunc(sysdate) - 2”将是你编写比较的方式。
要添加到我之前发布的内容,您需要针对工作日进行调整,具体操作方式取决于您的商店。一些商店维护一个带有假期等的商店日历表......但一种方法是使用如下代码来跳过周六和周日。- - select trunc(sysdate) - r from (select rownum r from dual connect by rownum <= 8) where to_char(trunc(sysdate) - r,'D') not in ('1','7') /
TRUNC(系统
19 年 1 月 24 日 19 年 1 月 23 日 19 年 1 月 22 日 19 年 1 月 21 日 19 年 18 月 19 年 17 月
选择了 6 行。-- 注意第 19 天和第 20 天不在列表中,这样的计算将取代上面硬编码的 2 天。