SQL Server中的DATEDIFF函数 - 在不同情况下执行不同

时间:2012-04-10 04:58:34

标签: sql-server-2008

我正在使用SQL Server,只是在我的案例中找出一个问题。 我使用DATEDIFF函数:

select datediff(dd,'1935-12-07','2010-03-02')/365.00  ---> 74.28
select datediff(dd,'1935-12-07','2010-03-02')/365     ---> 74
select datediff(yy,'1935-12-07','2010-03-02')         ---> 75

如果你能观察到如果我用'dd'尝试DATEDIFF那么我得到的差异是74 / 74.28。 但是,如果我将它与'yy'一起使用,我会得到差异为75。

为什么会这样?意味着为什么差异为75,因为它差不多接近74.

在不同情况下我需要这两种功能。但由于行为不同,我面临很多问题。

建议我解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:1)

第一种情况=您隐式转换为浮点数,显示正确的结果

第二种情况=你是在逼迫地转换为一个int,它作为转换的一部分向下舍入(Floor值)

第三种情况=你根本没有投出任何东西,DATEDIFF()返回一个有符号的int,它向上舍入(天花板值)

解决方案:做任何你想做的事,但要在整个代码中保持一致。

答案 1 :(得分:1)

datediff函数会检查您指定的日期部分的差异,因此说两个日期的年份部分的差异为75是正确的。

或者像微软公司的人那样说出来,它会计算该日期部分的边界数量。在您的示例中,两个日期之间有75年的边界。

查看this msdn页面,它解释了它应该如何工作。