需要在数据库中定义假期的时间和年限.
大体有这样几条数据,
1.工作不满一年只有3天(24小时)病假
2.工作满一年至当年年底有X小时假期.
3.工作满一年至两年有8天假期
...我现在的设计是用一整型字段,区分工作年限,这样很容易通过SQL取出记录.但头疼的是1和2的情况,该如何设计比较好?

解决方案 »

  1.   

    create table employee
    (
       personID varchar(10), -- PK
       pname    varchar(20),
       gender 
       ...
       hireDate datetime,
       ...
    )select getdate()- hireDate from employee;
      

  2.   

    一般,用一个
    入职日期 字段
    计算假期用如下语句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
      

  3.   

    谢谢楼上两位
    计算的部分我在程序里实现了,用C#,比sql要灵活.
    我是想存储假期时间长短的定义,以后如何需要修改可以灵活点.如果修改逻辑肯定需要大改动了.
      

  4.   

    2.工作满一年至当年年底有X小时假期. 
    3.工作满一年至两年有8天假期 
    这两个很难理解,能举例说明吗?
    2.工作满一年至当年年底有X小时假期. 
    if (fServiceyear >= 1 && 当年年底??? )
       nLeaveEntitleHour = X;3.工作满一年至两年有8天假期 
    if (fServiceyear >= 1 && fServiceyear <2)
       nLeaveEntitleHour = 8*8;?? is this correct ?
      

  5.   

    nServiceMonths = date(2008-12) - hiredate;if nServiceMonths <12
       return 0;if nServiceMonths <24
       return (nServiceMonths - 12)*8/12if nServiceMonths >=24
       return  8
      

  6.   

    这是我的数据结构
    [HolsID] int 自动生成ID
    [HolsLenSer] varchar 工作年限
    [HolsLenSerDesc] varchar 假期描述
    [HolsDayCount] int 假期天数
    [HolsHourCount] int 假期小时数
    [HolsSex] int 性别
    [HolsPayPer] float 工资支付比例
    [HolsAmount] int 请假次数
    [HolsType] varchar 假期类型(年假,病假,事假)
    [HolsStatus] varchar 假期状态有年假和病假两种类型,如上面所说,病假在工作未满一年时有3天,满一年后按年假处理.也就是说在转正的当年有两种情况,我用[HolsLenSer]以整型表示的话,无法区分工作年限.好像我也没把问题说清楚,一会再补充