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

时间:2012-10-23 13:43:52

标签: sql sql-server

我有一张包含日期列的5000条记录的表格。

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

4 个答案:

答案 0 :(得分:23)

如果您只想平均日期:

SELECT CAST(AVG(CAST(datefield AS INT)) AS DATETIME) FROM dates;

如果你想考虑时间:

SELECT CAST(AVG(CAST(datefield AS FLOAT)) AS DATETIME) FROM dates;

请参阅fiddle进行测试。

答案 1 :(得分:6)

CONVERT(DATETIME, AVG(CONVERT(FLOAT, datefield))) as [AverageDate] 

答案 2 :(得分:0)

对于那些遇到转换错误(无法将日期转换为int或float的人)... 这是使用datediffdateadd

的简单解决方案
SELECT 
DATEADD(DAY, AVG(DATEDIFF(DAY, '1900-01-01', datefield)), '1900-01-01') AS [AverageDate]
FROM dates;

请注意,1900年1月1日是任意日期,两个地方都必须相同。

答案 3 :(得分:0)

我做了这个,希望以后能帮到其他人! SQL 很糟糕,因为它没有让这变得更容易。

Declare @Day as int;
Declare @Month as int;
Declare @Year as int;
Declare @Date as varchar(50);
SET @Day = (SELECT AVG(DAY(Column_name)) FROM Table_Name)
SET @Month = (SELECT AVG(MONTH(Column_name)) FROM Table_Name)
SET @Year = (SELECT AVG(YEAR(Column_name)) FROM Table_Name)
SET @Date =  CAST(@Day as varchar) +'-' + CAST(@Month as varchar) + '-' + CAST(@Year as varchar);
SELECT CONVERT(datetime2,@Date,103)