编写一个代码检查星期天休息并让所有部分工作正常,除了离开部分
Posted
技术标签:
【中文标题】编写一个代码检查星期天休息并让所有部分工作正常,除了离开部分【英文标题】:Write a code which check sunday week rest and leaves all parts works fine except leave part 【发布时间】:2021-03-09 06:16:18 【问题描述】:我写了一个代码,除了离开和部分不工作之外,一切都很好,请给我一些可能对我有帮助的东西
function CF_WEEKRESTFormula return CHAR is
v_rest number;
gaz_dt number;
descr varchar2(90);
gz_dt date;
AT_P VARCHAR2(10);
BEGIN
SELECT week_rest
INTO v_rest
FROM EMPLOYEES
WHERE employee_id1=:employee_id1
AND :ATT_DATE between :DATE1 and :DATE2;
select gazzeted_date, description into gz_dt, descr
from gazzeted_days
where gazzeted_date between :DATE1 and :DATE2;
select ATT_PRESENT into AT_P
from PAY_IN_OUT
where ATT_PRESENT = 'L'
AND EMP_CODE=:employee_id1
AND :ATT_DATE between :DATE1 and :DATE2;
IF TO_CHAR( :ATT_DATE, 'D' ) = v_rest THEN
RETURN 'WEEK REST';
ELSIF
:ATT_DATE = GZ_DT THEN
RETURN DESCR;
ELSIF AT_P = TO_CHAR(:ATT_DATE) THEN
RETURN 'LEAVE';
ELSE RETURN 'PRESENT';
END IF;
exception
when No_data_found
then return 'a';
END;
除了这部分之外的所有工作
ELSIF AT_P = TO_CHAR(:ATT_DATE) THEN
RETURN 'LEAVE';
如果有 l 则检查 att_date 的 L agt 日期在哪里,然后给 Leave att_date 请给我一些建议 问候
【问题讨论】:
【参考方案1】:AT_P
是 varchar2(10)
您在其中选择了ATT_PRESENT
,但我们不知道它的数据类型 - 大概是一个字符串
当您稍后将其与:att_date
进行比较时,字符串 可能代表某个日期值
如果是这样,您不应该这样做 - 始终将日期存储到 DATE
数据类型列中
:ATT_DATE
看起来像 DATE
数据类型;是吗?还是VARCHAR2
?
如果是DATE
,那么应用TO_CHAR
是有意义的,但是缺少格式 - 你应该提供它,它应该与返回到at_p
的那个匹配
如果是VARCHAR2
,那再TO_CHAR
-ing也没用了
因此:我认为 - 如果您将格式应用于 :ATT_DATE
,则可能会发生积极的。例如,如果:att_date = '03/08/2021'
(mm/dd/yyyy
格式的今天日期):
elsif at_p = to_char(:att_date, 'mm/dd/yyyy') then
return 'leave';
确切的代码取决于真正存储在at_p
和:att_date
中的内容。
【讨论】:
at_p 存储字符串,如L
和 `P` 和 att_date 有我想要的日期,其中日期等于 att_date = L 然后如果 att_present 有 L
,则返回 03/09/21 的平均值然后它显示 Leave else is Present 并且其他所有代码都很好
显然,您不能将 L 或 P 与代表 日期 的 ATT_DATE 进行比较,它们永远不会匹配。应该是例如ELSIF AT_P = 'L' THEN return 'leave'
?
它为所有字段提供 Leave 我先尝试了,我可以为此做更多的事情,请帮助我以上是关于编写一个代码检查星期天休息并让所有部分工作正常,除了离开部分的主要内容,如果未能解决你的问题,请参考以下文章
当您连接 2 个具有相同架构的表并检查除一个以外的所有字段是不是相等时,如何避免在 SQL 中编写冗长的 where 子句?
使用java 排除 两个日期段中的 休息日和节假日 。在线等待中十万火急,求大牛帮忙,多谢了。。。。