首页 > 解决方案 > 前 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}'

谢谢你。

标签: oracledatedatetimeoracle11g

解决方案


在 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 天。


推荐阅读