sql数据库功能(截止时间为下午4:30)

sql数据库功能(截止时间为下午4:30),sql,oracle,Sql,Oracle,我正在尝试编写SQL数据库函数。应计算工作日数,截止点为下午4:30。因此,下午4:30之前的所有订单都会出现在前一天的订单总数中,下午4:30之后的订单会出现在当天的订单总数中。我找到了计算工作日数的代码,但我知道如何在代码中添加截止点 create or replace function "number_of_worked_day" (p_start_dt date, p_end_dt date ) return number as L_Number_Of_Days Number; L_S

我正在尝试编写SQL数据库函数。应计算工作日数,截止点为下午4:30。因此,下午4:30之前的所有订单都会出现在前一天的订单总数中,下午4:30之后的订单会出现在当天的订单总数中。我找到了计算工作日数的代码,但我知道如何在代码中添加截止点

create or replace
function "number_of_worked_day"
(p_start_dt date,
 p_end_dt date
)
return number as
L_Number_Of_Days Number;
L_Start_Dt Date;
L_end_dt  DATE;

Begin
L_Start_Dt :=Trunc(P_Start_Dt);
L_end_dt  := trunc(p_end_dt);


SELECT COUNT(*) 
into l_number_of_days
FROM (
      WITH date_tab AS (SELECT TO_DATE (L_Start_Dt) + LEVEL - 1 business_date
      FROM DUAL
      CONNECT BY LEVEL <=
      TO_DATE (L_end_dt)
       - TO_DATE (L_Start_Dt)
       + 1)
SELECT business_date
FROM date_tab
WHERE TO_CHAR (business_date, 'DY') NOT IN ('SAT', 'SUN')
AND NOT EXISTS 
    ( SELECT 1
      FROM PUBLIC_HOLIDAY
      WHERE business_date between START_DT and END_DT));
return l_number_of_days;
end;

我发现你的代码有点难以理解。但从下午4:30开始的一天的处理逻辑是从时间中减去16.5小时。例如:

SELECT trunc(business_date - 16.5/24), count(*)
FROM date_tab
GROUP BY trunc(business_date - 16.5/24)
ORDER BY trunc(business_date - 16.5/24);

因为在我看来这很像Oracle,所以我用Oracle替换了MySQL选项卡。我不太明白。关于订单,您所说的截止时间是下午4:30,但您的查询与订单无关。似乎查询只是返回两个传入日期之间的工作日数的一种复杂方法。下午4:30,所以是16.5/24。@Andreas。非常感谢。