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

Sta*_*ace 5 sql t-sql sql-server datetime datediff

我的sql server 2005表中有一列应该保存员工服务的月数.

由于我也有员工参与的日期,我希望"months_In_Service"列成为计算列.

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

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

gbn*_*gbn 12

类似的东西(可能需要交换1和0,未经测试)

datediff(month,[DateEngaged],getdate()) +
 CASE WHEN DATEPART(day, [DateEngaged]) < DATEPART(day, getdate()) THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)

DATEDIFF测量月份边界,例如每月1日00:00时间,而不是日期周年纪念日

编辑:看到OP的评论后,如果开始日期>结束日,则必须减去1

DATEDIFF (month, DateEngaged, getdate()) -
 CASE
   WHEN DATEPART(day, DateEngaged) > DATEPART(day, getdate()) THEN 1 ELSE 0
 END
Run Code Online (Sandbox Code Playgroud)

因此,对于12月20日至1月13日,DATEDIFF给出1然后20> 13因此减去1 =零月.