如何在SQL Server 2005中的两个日期之间获得数月的数字
-
20-09-2019 - |
题
我的SQL Server 2005表中有一个专栏,该列应该保留员工服务的月数。
由于我还拥有该员工参与的日期,因此我希望“ moning_in_service”列是计算列。
现在如果我使用 DATEDIFF(month,[DateEngaged],GETDATE())
作为计算列中几个月的公式,结果有时是正确的,而其他时间则不正确。
在约会式价值和当前日期之间获得几个月数的更好可靠方法是什么?我在计算列中应该使用哪个公式?
解决方案
类似(可能需要交换1和0,未经测试)
datediff(month,[DateEngaged],getdate()) +
CASE WHEN DATEPART(day, [DateEngaged]) < DATEPART(day, getdate()) THEN 1 ELSE 0 END
日期尺寸的月份边界,例如每个月1的时间,而不是每月周年纪念日
编辑:看到OP的评论后,您必须减去1,如果开始日期>结束日
DATEDIFF (month, DateEngaged, getdate()) -
CASE
WHEN DATEPART(day, DateEngaged) > DATEPART(day, getdate()) THEN 1 ELSE 0
END
因此,在12月20日至1月13日,约会者给出1,然后给出20> 13,因此减去1 =零月。
其他提示
与GBN相同,但击键较少:-)
SELECT
DATEDIFF(MONTH, DateEngaged, GETDATE()) +
CASE
WHEN DAY(DateEngaged) < DAY(GETDATE())
THEN 1
ELSE 0
END
也许您想要类似的东西:
(year(getdate())-year([DateEngaged]))*12+(month(getdate())-month([DateEngaged]))
如果您认为该月的意思是30天,您也可以圆形谷
round((datediff(day,[DateEngaged],getdate()))/30.00,0)
不隶属于 StackOverflow