小编典典

如何获取SQL Server 2005中两个日期之间的月份数

sql

我的sql server 2005表中有一个列,该列应保存员工在职的月数。

由于我也有该雇员的聘用日期,因此我希望“ months_In_Service”列为计算列。

现在,如果将我DATEDIFF(month,[DateEngaged],GETDATE())用作服务计算月份中的月份的公式,则结果有时是正确的,而有时是不正确的。

获取DateEngaged值和当前日期之间的月数的更好的可靠方法是什么?我应该在计算列中使用哪个公式?


阅读 201

收藏
2021-03-23

共1个答案

小编典典

诸如此类(可能需要交换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 =零个月。

2021-03-23