需要在数据库中定义假期的时间和年限.
大体有这样几条数据,
1.工作不满一年只有3天(24小时)病假
2.工作满一年至当年年底有X小时假期.
3.工作满一年至两年有8天假期
...我现在的设计是用一整型字段,区分工作年限,这样很容易通过SQL取出记录.但头疼的是1和2的情况,该如何设计比较好?
大体有这样几条数据,
1.工作不满一年只有3天(24小时)病假
2.工作满一年至当年年底有X小时假期.
3.工作满一年至两年有8天假期
...我现在的设计是用一整型字段,区分工作年限,这样很容易通过SQL取出记录.但头疼的是1和2的情况,该如何设计比较好?
(
personID varchar(10), -- PK
pname varchar(20),
gender
...
hireDate datetime,
...
)select getdate()- hireDate from employee;
入职日期 字段
计算假期用如下语句select
case when y<1 or y=1 and m<12 or y=1 and m=12 and day(入职日期)>day(getdate()) then 24
when y=1 and m>=12 then X
when y>=1 and y<=2 then 64
...
end as 假期时数
from (
select *,
datediff(year,入职日期,getdate()) as y,
datediff(month,入职日期,getdate()) as m
) as t
计算的部分我在程序里实现了,用C#,比sql要灵活.
我是想存储假期时间长短的定义,以后如何需要修改可以灵活点.如果修改逻辑肯定需要大改动了.
3.工作满一年至两年有8天假期 这两个很难理解,能举例说明吗?
2.工作满一年至当年年底有X小时假期.
if (fServiceyear >= 1 && 当年年底??? )
nLeaveEntitleHour = X;3.工作满一年至两年有8天假期
if (fServiceyear >= 1 && fServiceyear <2)
nLeaveEntitleHour = 8*8;?? is this correct ?
return 0;if nServiceMonths <24
return (nServiceMonths - 12)*8/12if nServiceMonths >=24
return 8
[HolsID] int 自动生成ID
[HolsLenSer] varchar 工作年限
[HolsLenSerDesc] varchar 假期描述
[HolsDayCount] int 假期天数
[HolsHourCount] int 假期小时数
[HolsSex] int 性别
[HolsPayPer] float 工资支付比例
[HolsAmount] int 请假次数
[HolsType] varchar 假期类型(年假,病假,事假)
[HolsStatus] varchar 假期状态有年假和病假两种类型,如上面所说,病假在工作未满一年时有3天,满一年后按年假处理.也就是说在转正的当年有两种情况,我用[HolsLenSer]以整型表示的话,无法区分工作年限.好像我也没把问题说清楚,一会再补充