如何用存储过程来计算工龄?
假设数据表中有 入厂时间、工龄 两字段,目前知道入厂时间,如何计算工龄,存储过程要怎么写,另外,可否设为定时运行呀?谢谢!

解决方案 »

  1.   

    工龄好象只能计算工作时间,如中间有长时间的病休,不能计算进去。
    如只计算时间差,可建一视图计算工龄,随时可查出入厂时间。
    create view 视图名 as select datediff(yy,getdate(),入厂时间) as 工龄(年),
           datediff(month,getdate(),入厂时间) as 工龄(月) ,其它字段
      from  表 直接查询视图,即可随时查出工龄是几年,或几月
      

  2.   

    /*
    如何用存储过程来计算工龄?
    假设数据表中有 入厂时间、工龄 两字段,目前知道入厂时间,如何计算工龄,存储过程要怎么写,另外,可否设为定时运行呀?
    -------------------------
    将工龄设置为计算列就可以了。
    */CREATE TABLE Test (入厂时间 datetime, 工龄 AS (datediff(year,入厂时间,getdate())))
    GOinsert Test select dateadd(year,-10,getdate())
    select * from Test
    /*
    入厂时间 工龄
    1997-09-04 23:26:21.513 10
    */--删除测试
    drop table Test
      

  3.   

    将入厂时间与现在时间比较,可能:
    工龄=现在年份-入厂年份
    或者
    工龄=现在年份-入厂年份-1定时执行可以考虑用job
      

  4.   

    /*
    或者再加两个字段:
    工龄月:正数表示超出的月份数;负数表示还差的月份数。
    工龄日:正数表示超出的天数;负数表示还差的天数。
    这样计算退休人员就很方便了。
    */
    CREATE TABLE Test (
    入厂时间 datetime, 
    工龄年 AS datediff(year,入厂时间,getdate()), 
    工龄月 AS datediff(month,dateadd(year,datediff(year,入厂时间,getdate()),入厂时间),getdate()),
    工龄日 AS datediff(day,dateadd(year,datediff(year,入厂时间,getdate()),入厂时间),getdate())
    )
    GOinsert Test select dateadd(month, 10, dateadd(year,-10,getdate()))
    insert Test select dateadd(month, -10, dateadd(year,-10,getdate()))
    select * from Test
    /*
    入厂时间 工龄
    1998-07-04 23:46:48.200, 9, 2, 62
    1996-11-04 23:46:48.200, 11, -2, -61
    */--删除测试
    drop table Test