Date是varchar,转换为float以获取平均日期

时间:2012-07-18 13:15:36

标签: sql sql-server-2005 varchar

我的日期是varchar(50),在我的数据库中显示如下:

  

2/15/2012

该表如下所示:(注意:someid不是主键,它标识一个组)

 |  someid  |   date     |  float_value  | 
 |   1      | 2/15/2012  |     3.2       |   
 |   1      | 2/15/2012  |     1.4       |
 |   1      | 2/15/2012  |     2.1       |
 |   1      | 2/16/2012  |     1.8       |

我将如何做这样的事情:

select avg(date), avg(float_value)
where someid = 1

要返回这样的内容:

|  date     |  float_value  |
| 2/15/2012 |   2.126       |     

也许答案不是平均日期,而是最常出现的日期(就某些情况而言)。

任何帮助都将得到sql专家的赞赏。

提前致谢

1 个答案:

答案 0 :(得分:3)

忘记浮动废话。怎么样:

SELECT DATEADD(DAY, AVG(DATEDIFF(DAY, 0, create_date)), 0) FROM sys.objects;

在您的情况下,您需要先转换。 E.g。

SELECT 
  avg_date = DATEADD(DAY, AVG(DATEDIFF(DAY, 0, CONVERT(SMALLDATETIME, [date]))), 0) 
FROM dbo.yourtable
WHERE someid = 1;

这种变化也可能有用:

SELECT 
  someid, 
  avg_date = DATEADD(DAY, AVG(DATEDIFF(DAY, 0, CONVERT(SMALLDATETIME, [date]))), 0) 
FROM dbo.yourtable
GROUP BY someid;

编辑以提供似乎必要的确切精确和特定格式:

SELECT 
  avg_date = CONVERT(CHAR(10), 
    DATEADD(DAY, AVG(DATEDIFF(DAY, 0, CONVERT(SMALLDATETIME, [date]))), 0),
    101) 
FROM dbo.yourtable
WHERE someid = 1;