如果某个日期属于周末,则验证该日期

时间:2012-03-20 12:39:55

标签: oracle

有没有比下面的功能代码更好的方法

// 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;
/

2 个答案:

答案 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
相关问题