我正在尝试使用WHERE中的sysdate(即
)来接下来的5个工作日where trunc(teststart) between trunc(sysdate) and trunc(sysdate+4)),
但如果范围包括星期五,则需要计算周末,星期六和星期五。周日。
在查看sysdate或sysdate + 3(或任何数字)时,会告诉您星期几的命令是什么?你会如何做到这样的事情?
答案 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月最后一个星期四的假期,并在那里增加了额外的假期。与简单的查找相比,编程很难。