8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Oracle 查询获取两个日期之间的工作日数

qwertyyuiop 1月前

90 0

我们使用的是 Oracle 11。在我们的 CASE WHEN 语句中,我需要检查两个日期之间的天数是否 > 3 个工作日(不包括周末和节假日)。因此,如果 Date1 = 1/21/19 (

我们正在使用 Oracle 11。

在我们的 CASE WHEN 语句中,我需要检查两个日期之间的天数是否 > 3 个工作日(因此不包括周末和节假日)。

所以,如果

日期 1 = 1/21/19(星期一)

日期 2 = 1/18/19(星期五)

日期 1 和日期 2 之间的工作日数是 1 天,而不是 3 天。

CASE WHEN TO_DATE(SETTLEMENT_DATE, 'YYYY-MM-DD') - TO_DATE(TRADE_DATE, 
'YYYY-MM-DD')  > 3  THEN 0  --> this includes weekend and holidays
WHEN CODE = 1 THEN 1
WHEN CODE =2 THEN 2
ELSE 3
END AS MyColumn

谢谢。

帖子版权声明 1、本帖标题:Oracle 查询获取两个日期之间的工作日数
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由qwertyyuiop在本站《date》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您可以创建这样的函数,其用途 conditional aggregation 如下

    SQL> alter session set NLS_TERRITORY="AMERICA"
    SQL> create or replace function get_working_days( 
                                                 i_settlement_date tab.settlement_date%type, 
                                                 i_trade_date      tab.trade_date%type
                                               ) return pls_integer is
      o_working_days  pls_integer;                                         
    begin
      select nvl(sum(case when
                  to_char(trade_date + level,'Dy') in ('Sat','Sun') 
                 then 0
                 else 1
                 end ),0)
      into o_working_days
      from tab
     where settlement_date >= trade_date
     connect by level <= i_settlement_date - i_trade_date + 1;
    
     return o_working_days;
    end; 
    

    获取两个日期之间的工作日(包括两个边界日期)。

    即,对于您的情况,它将返回 2,包括星期一和星期五。

    编辑: 如果您不想创建函数,请使用以下带有替代变量的 &i_settlement_date 查询 &i_trade_date

      select nvl(sum(case when
                  to_char(trade_date + level,'Dy') in ('Sat','Sun') 
                 then 0
                 else 1
                 end ),0) as working_days
      from tab
     where settlement_date >= trade_date
     connect by level <= &i_settlement_date - &i_trade_date + 1;
    

    并在提示时分别输入样本值 date'2019-01-21' date'2019-01-18'

返回
作者最近主题: