如何在SQL Server中的日期列中查找平均值

aSy*_*oad 14 sql sql-server

我有一个包含5000个记录和日期列的表.

我如何找到这些日期的平均值.我试过了AVG(datefield),但它说Operand data type datetime is invalid for avg operator

Fra*_*s P 24

如果您只想平均日期:

SELECT CAST(AVG(CAST(datefield AS INT)) AS DATETIME) FROM dates;
Run Code Online (Sandbox Code Playgroud)

如果你想考虑时间:

SELECT CAST(AVG(CAST(datefield AS FLOAT)) AS DATETIME) FROM dates;
Run Code Online (Sandbox Code Playgroud)

小提琴测试.

  • 我收到`不允许从数据类型日期到int的显式转换 (4认同)
  • 如何使用`DateTime2`类型?相同的Cast生成"不允许从数据类型datetime2到float的显式转换".错误. (3认同)
  • @Fka:你的表使用类型`DATE`而不是像这个例子中的`DATETIME`.我想你需要先把它转换成`DATETIME`. (2认同)

小智 8

对于那些遇到转换错误的人(无法将日期转换为 int 或 float)...这是一个使用datediff和的简单解决方案dateadd

SELECT 
DATEADD(DAY, AVG(DATEDIFF(DAY, '1900-01-01', datefield)), '1900-01-01') AS [AverageDate]
FROM dates;
Run Code Online (Sandbox Code Playgroud)

请注意,1900 年 1 月 1 日日期是任意的,只需两个位置相同即可。


Lit*_*les 6

CONVERT(DATETIME, AVG(CONVERT(FLOAT, datefield))) as [AverageDate] 
Run Code Online (Sandbox Code Playgroud)