Oracle实现非工作日剔除,然后计算超时次数

现在需要根据不同的国家剔除对应的非工作日时间,建立一个非工作日表包括节假日和国家,怎么和原本的超时计算逻辑关联,怎么和国家做关联


CREATE TABLE non_working_days (
   holiday_date DATE,
   country VARCHAR2(50)
);
INSERT INTO non_working_days (holiday_date, country)
VALUES (TO_DATE('2022-01-01', 'YYYY-MM-DD'), 'China');

CREATE OR REPLACE PROCEDURE calculate_timeout(
   start_date IN DATE,
   end_date IN DATE,
   country IN VARCHAR2
) AS
   non_working_days_count NUMBER;
BEGIN
   -- 计算非工作日数量
   SELECT COUNT(*) INTO non_working_days_count
   FROM non_working_days
   WHERE holiday_date BETWEEN start_date AND end_date
   AND country = country;
  
END;

援引GPT回答:
要实现非工作日剔除和计算超时次数,可以按照以下步骤进行:

  1. 创建一个非工作日表,包括节假日和国家信息。表的结构可以包括以下字段:日期、国家、是否为工作日(可以用0表示非工作日,1表示工作日)。

  2. 根据业务需求,确定超时的计算逻辑。假设超时是指某个任务的完成时间超过了预定的时间,可以根据任务的开始时间和结束时间计算超时时长。

  3. 在超时计算的逻辑中,可以引入非工作日表。在计算超时时长之前,先根据任务的开始时间和结束时间,从非工作日表中查询对应的国家和日期,判断是否为工作日。如果是非工作日,则将其剔除。

  4. 如果需要根据国家进行关联,可以在非工作日表中添加一个国家字段,并在原始数据表中添加一个国家字段。然后可以通过国家字段进行关联查询,将非工作日表中的工作日信息应用到原始数据表中。

通过以上步骤,可以实现非工作日的剔除,并计算超时次数。具体的实现方式可以根据实际业务需求和数据结构进行调整。