function get_hours(p_date1 date, p_date2 date) return number is
    l_return NUMBER;
    l_date1  date;
    l_date2  date;
    l_days NUMBER; --天数
    l_week_days NUMBER :=0; --周末天数
  begin
    --开始时间小于8点
    if p_date1 < trunc(p_date1) + 1 / 3 then
      l_date1 := trunc(p_date1) + 1 / 3;
      --开始时间大于17点
    elsif p_date1 > trunc(p_date1) + 17 / 24 then
      l_date1 := trunc(p_date1) + 4 / 3;
    else
      l_date1 := p_date1;
    end if;
    --当天的
    if p_date2 <= l_date1 then
      l_return := round((p_date2 - p_date1) * 24, 2);
    
      --没有超过一天
    elsif p_date2 - l_date1 < 1 then
      l_return := round((p_date2 - l_date1) * 24, 2);
      --超过一天
    else
      l_days := trunc( p_date2 - l_date1);
      for i in 1.. l_days loop
        if to_char(p_date2-i,'d') in ('1','7') then
          l_week_days := l_week_days +1;
        end if;
      end loop;
      l_return := round((floor(p_date2 - l_date1)-l_week_days) * 8 +
                        (p_date2 - (l_date1 + floor(p_date2 - l_date1))) * 24,
                        2);
    end if;
    return l_return;
  EXCEPTION
    WHEN OTHERS THEN
      return 0;
  end;
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐