有没有比下面的功能代码更好的方法
// checks whether the IN data falls on a weekend
CREATE OR REPLACE FUNCTION business_days(start_date IN DATE)
RETURN NUMBER IS
busdays NUMBER := 0;
stDate DATE;
BEGIN
stDate := TRUNC(start_date);
/* Adjust for ending date on a saturday */
IF TO_CHAR(enDate,'D') = '7' THEN
busdays := busdays - 1;
END IF;
/* Adjust for starting date on a sunday */
IF TO_CHAR(stDate,'D') = '1' THEN
busdays := busdays - 1;
END IF;
else
busdays := 0;
END IF;
RETURN(busdays);
END;
/
答案 0 :(得分:3)
在Oracle中,星期几从星期一开始(相当于1);因此,如果您要查找一天是否属于周末,则需要将其与第6和第7天(对应于周六和周日)进行比较,例如:
if to_char(prmDate,'D') not in (6,7) then
--weekend...
此外,从日期开始提取日期(以数字格式)并比较它是'6'还是'7'似乎是了解它是工作日还是周末的唯一选择,并且工作正常。
答案 1 :(得分:2)
您可以使用一个查询执行此操作:
根据帖子的标题你想要的东西是:
select case when to_char(start_date, 'D') in ('7', '1') then -1 else 0 end
from dual
根据您的代码示例,我认为您想要:
select case
when to_char(start_date, 'D') = '7' and to_char(end_date, 'D') ='1' then -2
when to_char(start_date, 'D') = '7' or to_char(end_date, 'D') ='1' then -1
else 0 end
from dual