工龄好象只能计算工作时间,如中间有长时间的病休,不能计算进去。 如只计算时间差,可建一视图计算工龄,随时可查出入厂时间。 create view 视图名 as select datediff(yy,getdate(),入厂时间) as 工龄(年), datediff(month,getdate(),入厂时间) as 工龄(月) ,其它字段 from 表 直接查询视图,即可随时查出工龄是几年,或几月
/* 如何用存储过程来计算工龄? 假设数据表中有 入厂时间、工龄 两字段,目前知道入厂时间,如何计算工龄,存储过程要怎么写,另外,可否设为定时运行呀? ------------------------- 将工龄设置为计算列就可以了。 */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
如只计算时间差,可建一视图计算工龄,随时可查出入厂时间。
create view 视图名 as select datediff(yy,getdate(),入厂时间) as 工龄(年),
datediff(month,getdate(),入厂时间) as 工龄(月) ,其它字段
from 表 直接查询视图,即可随时查出工龄是几年,或几月
如何用存储过程来计算工龄?
假设数据表中有 入厂时间、工龄 两字段,目前知道入厂时间,如何计算工龄,存储过程要怎么写,另外,可否设为定时运行呀?
-------------------------
将工龄设置为计算列就可以了。
*/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
工龄=现在年份-入厂年份
或者
工龄=现在年份-入厂年份-1定时执行可以考虑用job
或者再加两个字段:
工龄月:正数表示超出的月份数;负数表示还差的月份数。
工龄日:正数表示超出的天数;负数表示还差的天数。
这样计算退休人员就很方便了。
*/
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