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

如何在SQL Server中查找日期列的平均值,sql,sql-server,Sql,Sql Server,我有一个包含5000条记录的表,其中有一个日期列 我如何找到这些日期的平均值。我尝试了AVG(datefield),但它说操作数数据类型datetime对于AVG运算符无效,如果您只想平均日期: CONVERT(DATETIME, AVG(CONVERT(FLOAT, datefield))) as [AverageDate] SELECT CAST(AVG(CAST(datefield AS INT)) AS DATETIME) FROM dates; 如果你想考虑时间: SELECT

我有一个包含5000条记录的表,其中有一个日期列


我如何找到这些日期的平均值。我尝试了
AVG(datefield)
,但它说
操作数数据类型datetime对于AVG运算符无效

,如果您只想平均日期:

CONVERT(DATETIME, AVG(CONVERT(FLOAT, datefield))) as [AverageDate] 
SELECT CAST(AVG(CAST(datefield AS INT)) AS DATETIME) FROM dates;

如果你想考虑时间:

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

请参阅测试。

了解发生转换错误(无法将日期转换为int或float)的用户。。。 下面是一个使用
datediff
dateadd

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

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

我做了这个,我希望它能在将来帮助其他人!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)

您是否尝试将其转换为float,然后使用AVG?我认为它可能有效。我收到“不允许从数据类型date显式转换为int”。`@Fka:您的表使用的是type
date
,而不是本例中的
DATETIME
。我想您需要先将其转换为
DATETIME
。如何使用
DateTime2
类型?同一转换生成“不允许从数据类型datetime2显式转换为float”。错误。如果您的表使用的是日期而不是日期时间,则此操作可行,但看起来更疯狂:
SELECT Cast(Cast(AVG(Cast(Cast(dateColumn AS datetime)AS INT))AS datetime)AS date)