我的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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top