我的sql server 2005表中有一个列,该列应保存员工在职的月数。
由于我也有该雇员的聘用日期,因此我希望“ months_In_Service”列为计算列。
现在,如果将我DATEDIFF(month,[DateEngaged],GETDATE())用作服务计算月份中的月份的公式,则结果有时是正确的,而有时是不正确的。
DATEDIFF(month,[DateEngaged],GETDATE())
获取DateEngaged值和当前日期之间的月数的更好的可靠方法是什么?我应该在计算列中使用哪个公式?
诸如此类(可能需要交换1和0,未经测试)
datediff(month,[DateEngaged],getdate()) + CASE WHEN DATEPART(day, [DateEngaged]) < DATEPART(day, getdate()) THEN 1 ELSE 0 END
DATEDIFF测量月份边界,例如每月1号的00:00时间,而不是每月的周年纪念日
编辑:看到OP的评论后,如果开始日期>结束日期必须减去1
DATEDIFF (month, DateEngaged, getdate()) - CASE WHEN DATEPART(day, DateEngaged) > DATEPART(day, getdate()) THEN 1 ELSE 0 END
因此,对于12月20日至1月13日,DATEDIFF给出1,然后20> 13,因此减去1 =零个月。