0

我正在使用 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。

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

建议我解决这个问题。

谢谢。

4

2 回答 2

1

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

第二种情况=您隐式转换为一个 int,它作为转换的一部分向下舍入(Floor 值)

第三种情况 = 你根本没有投射任何东西,并DATEDIFF()返回一个带符号的 int,它向上取整(上限值)

解决方案:随心所欲,但在整个代码中保持一致。

于 2012-04-10T05:03:44.067 回答
1

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

或者像 microsoft 的人们所说的那样,它计算跨越该日期部分的边界数。在您的示例中,两个日期之间有 75 年的界限。

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

于 2012-04-10T05:03:57.737 回答