我试图让我的表结果(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.
我是不是假的或者是这种说法错误的?
我试图让我的表结果(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.
我是不是假的或者是这种说法错误的?
您需要将其转换为float
不int
,尝试:
SELECT CAST(AVG(CAST(regDate AS FLOAT)) AS DATETIME) FROM result
相同的错误: >不允许将日期数据类型显式转换为浮点数。 –
下面的代码返回平均值 - 但只能作为一年:
SELECT AVG(YEAR(regDate)) FROM results
这帮助了我。
如果你使用其他日期时间数据类型(即Date
或DateTime2
或SmallDateTime
),那么你需要将它转换为DateTime
铸造之前它作为一个Float
- 然后转换回DateTime
(调用后,AVG )之前隐式地针对(或显式转换为)另一个Date-Time数据类型。
这里的“防呆” SQL:
CAST(AVG(CAST(CAST(regDate as DateTime) as Float)) as DateTime)
警告:如果您使用的是掉出日期的正常范围内的日期的DateTime
数据类型的支持(即之前的任何时间一年1753
) ,那么你将需要考虑一种不同的方法。
你为什么要把一个日期作为一个INT? – Eli
假设你正在谈论[AVG]计算的[算术平均值](https://en.wikipedia.org/wiki/Average):平均过期日期并不具有数学意义。当然,你可以欺骗'sql server'来吐出一个值,但是我不会在这个日期的意义上打赌我的生活。 – HoneyBadger
@HoneyBadger为什么不呢?日期应该是一个独特的价值。 –