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 =零月.