在sql中将日期平均值转换为日期时转换失败

Kai*_*shu 1 sql-server sql-server-2012 date

我已经从日期中取平均日期并试图获得平均日期的结果,但它引发了如下错误: Conversion failed when converting date and/or time from character string.

sql查询执行为:

select 
CONVERT
(
    DATE,
    LEFT(
          convert(
                  varchar(10),
                  AVG(
                        convert(
                                 int, 
                                 convert(
                                           varchar(10), 
                                           OnMarkDate, 
                                           112
                                         )
                                 )
                       )
                  ),8
          )
)
from @tbl_XMLResult
Run Code Online (Sandbox Code Playgroud)

列值如下:

   '2001-10-11',
   '2001-10-03',
   '2001-09-24',
   '2000-05-31',
   '2001-10-15',
   '2008-01-01'
Run Code Online (Sandbox Code Playgroud)

数据类型为日期。

Jul*_*eur 6

这个查询:

  • 获取每个日期和 2000/01/01 之间的天数。
  • 计算平均天数
  • 将平均值加回到 2000/01/01

    SELECT 
        DATEADD(DAY
            , AVG(
                DATEDIFF(day, '2000/01/01', OnMarkDate)
            )
            , '2000/01/01' 
        )
    FROM @tbl_XMLResult;
    
    Run Code Online (Sandbox Code Playgroud)

输出:

2002-07-30 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

DATEADD 的返回类型是使用字符串时的日期时间。您可以:

  • 将字符串转换为日期
  • 使用日期类型的变量
  • 将输出转换回日期(即删除时间部分)。

您的数据:

DECLARE @tbl_XMLResult TABLE(OnMarkDate date);
INSERT INTO @tbl_XMLResult(OnMarkDate) VALUES
    ('2001-10-11')
   , ('2001-10-03')
   , ('2001-09-24')
   , ('2000-05-31')
   , ('2001-10-15')
   , ('2008-01-01');
Run Code Online (Sandbox Code Playgroud)