微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何计算从某个雇佣日期到以年-月-日表示的 getdate() 的公司工作经验?

如何解决如何计算从某个雇佣日期到以年-月-日表示的 getdate() 的公司工作经验?

我有一个员工表,其中在一列中存储了员工的入职日期。我正在尝试计算他们从 hire_dategetdate()? 的工作经验(资历),假设我想将此“Work_experience”列存储在旁边的视图中一个 Name 和 ID ,所以它会一直更新到当前日期。

我从其他用户那里看到了各种想法,其中大多数使用了 2 个变量(输入)和一个可以计算它们之间差异的查询,但大多数都没有考虑闰年,或有其他不足之处。

我想使用数学公式更准确地做到这一点,但我在多个网站上发现了这个:

f(y,m,d) = 365*y+ y/4 - y/100 + y/400 + (153*m- 457)/5 + d - 306
date_diff(y1,m1,d1,y2,m2,d2) = f(y1,d1) - f(y2,d2)

使用这个只会返回总天数,挑战在于将其转换为 x-Years y-Months z-Days 并使用 sql 将其存储在列中。

如果有关于如何使用数学公式或任何其他方法计算 work_experience 的任何建议/提示,我将非常感谢您的回答。

解决方法

这取决于您需要的时间间隔。可能的方式 是使用Sql server 日期算法。例如

-- input params
declare @dt datetime ='2017-06-07'
declare @now datetime = getdate();

-- output
declare @y int,@m int,@d int;

-- compute it
declare @base datetime;
set @y = datediff(Year,@dt,@now);
if (dateadd(Year,@y,@dt) > @now) 
   set @y -=1;
set @base= dateadd(Year,@dt);
set @m = datediff(month,@base,@now);
if (dateadd(month,@m,@base) > @now)
   set @m -=1;
set @base = dateadd(month,@base);   
set @d = datediff(day,@now);
-- A number of years,months and days in the @dt..@now interval
select @y,@d;

您可以使用这个想法创建 TVF 或其他东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。