重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
计算工龄,我有一个函数,可以帮助你。可以再次基础上去做下改动就好。
创新互联专注于饶平企业网站建设,成都响应式网站建设,商城网站建设。饶平网站建设公司,为饶平等地区提供建站服务。全流程定制开发,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
调用方式:select fn_GetWorkYear('2011-11-23','2019-10-25')
create function [dbo].[fn_GetWorkYear]
(
@beginday datetime, --开始日期
@endday datetime --结束日期
)
returns int
as
begin
if @beginday @endday
begin
return 0;
end
declare @workyear int
select @workyear = datediff(year, @beginday, @endday)-1--年份差值
if datepart(month, @endday) datepart(month, @beginday)--月份超过
begin
select @workyear = @workyear + 1
end
if datepart(month, @endday) = datepart(month, @beginday)--月份一样
begin
if datepart(day, @endday) = datepart(day, @beginday)--日超过
begin
select @workyear = @workyear + 1
end
end
return @workyear ;
End
GO
你用hibernate的话,可以把每个人的工龄提前算出来啊,在Employee.hbm.xml里:
property name="workTime" formula="(select round(months_between(sysdate,hireDate))/12 from employee where emp_id=id)"
/property
然后Employee里定义一个workTime对象,你查询Employee时,每个人的工龄也算出来了。上面最后那个ID为当前记录的ID,你在配置文件里如果定义的为大写,就用大写的。
用MONTHS_BETWEEN函数可计算两个Date数据之间的月份数:
SELECT MONTHS_BETWEEN
(TO_DATE('02-02-1995','MM-DD-YYYY'),
TO_DATE('01-01-1995','MM-DD-YYYY') ) "Months"
FROM DUAL;
Months
----------
1.03225806