我的sql server 2005表中有一个列,该列应保存员工在职的月数。
由于我也有该雇员的聘用日期,因此我希望“ months_In_Service”列为计算列。
现在,如果我使用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 =零个月。