2017-05-16 202 views
1

我试图让我的表结果(result.regDate作为日期时间)的平均日期。我的另一个话题下面的代码中发现:SQL Server:如何获得平均日期

SELECT CAST(AVG(CAST(regDate AS INT)) AS DATETIME) FROM result; 

但我发现了以下错误:

The explicit conversion of the date data type to float is not permitted.

我是不是假的或者是这种说法错误的?

+2

你为什么要把一个日期作为一个INT? – Eli

+0

假设你正在谈论[AVG]计算的[算术平均值](https://en.wikipedia.org/wiki/Average):平均过期日期并不具有数学意义。当然,你可以欺骗'sql server'来吐出一个值,但是我不会在这个日期的意义上打赌我的生活。 – HoneyBadger

+0

@HoneyBadger为什么不呢?日期应该是一个独特的价值。 –

回答

1

您需要将其转换为floatint,尝试:

SELECT CAST(AVG(CAST(regDate AS FLOAT)) AS DATETIME) FROM result 
+0

相同的错误: >不允许将日期数据类型显式转换为浮点数。 –

1

下面的代码返回平均值 - 但只能作为一年:

SELECT AVG(YEAR(regDate)) FROM results 

这帮助了我。

1

如果你使用其他日期时间数据类型(即DateDateTime2SmallDateTime),那么你需要将它转换为DateTime铸造之前它作为一个Float - 然后转换回DateTime(调用后,AVG )之前隐式地针对(或显式转换为)另一个Date-Time数据类型。

这里的“防呆” SQL:

CAST(AVG(CAST(CAST(regDate as DateTime) as Float)) as DateTime) 

警告:如果您使用的是掉出日期的正常范围内的日期的DateTime数据类型的支持(即之前的任何时间一年1753) ,那么你将需要考虑一种不同的方法。