在5个工作日内

时间:2013-12-10 18:39:53

标签: sql oracle date

我正在尝试使用WHERE中的sysdate(即

)来接下来的5个工作日
where trunc(teststart) between trunc(sysdate) and trunc(sysdate+4)), 

但如果范围包括星期五,则需要计算周末,星期六和星期五。周日。

在查看sysdate或sysdate + 3(或任何数字)时,会告诉您星期几的命令是什么?你会如何做到这样的事情?

2 个答案:

答案 0 :(得分:1)

你无法进行这种计算,因为oracle无法知道什么是工作日。这是因为每个地区都有自己的假期。要做到这一点,你将不得不创建一个表日历,并在其上放置所有日子,标记哪些是工作日。然后,您可以使用between子句

将您的表与此日历表联系起来

答案 1 :(得分:0)

@JorgeCampos点在第1天很好。你用MON 0表示星期一是一周的开始,数据库上的NLS设置和你的语言环境决定了这一点。

select to_char(sysdate, 'D'), to_char(sysdate,'DAY') from dual;

给出您要求的结果。我们有一张桌子,明年将在12月份填充。包括所有假期等。

 JCAL_JOB_DATE                          NOT NULL DATE
 JCAL_USER_ID                                    VARCHAR2(30)
 JCAL_ACTIVITY_DATE                              DATE
 JCAL_BUSINESS_DAY                               VARCHAR2(2)
 JCAL_HOLIDAY                                    VARCHAR2(2)
 JCAL_WEEKEND                                    VARCHAR2(2)

这用于预测未来的工作,以及一些不希望在假日或周末运行的重复工作。

select jcal_job_date from jcal where 
    JCAL_JOB_DATE > sysdate
and JCAL_BUSINESS_DAY='Y'
and rownum <6;  

这是获得第五个工作日的不太好的方式。获取您可以使用许多其他功能来简化此操作。

这种表对于确定过去的相同信息(工作,假期,周末)非常有用。

我在哪里,我们有11月最后一个星期四的假期,并在那里增加了额外的假期。与简单的查找相比,编程很难。