在sql

时间:2016-01-21 10:09:41

标签: sql-server tsql sql-server-2012

我已经计算了几个日期的日期平均值,而我正在尝试获取平均日期的结果,但我收到以下错误:

  

从字符串转换日期和/或时间时转换失败。

这是我试过的SQL查询:

select 
    CONVERT(DATE, LEFT(convert(varchar(10), AVG(convert(int, convert(varchar(10), OnMarkDate, 112)))), 8))
from 
    @tbl_XMLResult

以下是表格@tbl_XMLResult中的日期值:

   '2001-10-11',
   '2001-10-03',
   '2001-09-24',
   '2000-05-31',
   '2001-10-15',
   '2008-01-01'

这些日期属于date类型。

1 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

我计算了第一个CTE中最早的日期(2000-05-31)的天数差异,然后我计算了那些日差的平均值(所有int值),然后我加上这个平均值到最早的日期,获得“平均”日期。

DECLARE @input TABLE (OnMarkDate DATE)

INSERT INTO @input (OnMarkDate)
VALUES ('2001-10-11'), ('2001-10-03'), ('2001-09-24'),
       ('2000-05-31'), ('2001-10-15'), ('2008-01-01');

DECLARE @OldestDate DATE = '2000-05-31';    

;WITH DateAndDayDiff AS 
(
    SELECT DayDiff = DATEDIFF(DAY, @OldestDate, OnMarkDate)
    FROM @INPUT
), AverageDayDiff AS 
(
    SELECT AverageDiff = AVG(DayDiff)
    FROM DateAndDayDiff 
)
SELECT 
    DATEADD(DAY, AverageDayDiff.AverageDiff, @OldestDate)
FROM AverageDayDiff

当我这样做时,我会将2002-07-30作为此日期列表的“平均”日期。