如何将 varchar 转换为 int 以获得平均值?

How to convert varchar to int to get average?

我想获得特定时间段内每个 user_id 的平均值。

由于 RIGHT 适用于字符串,我必须将其转换为 int 并获取平均值。 出于这个原因,我得到错误:

Conversion failed when converting the varchar value '08:36' to data type int.

SELECT 
    user_id,
    avg(convert (int , right('0' + convert(VARCHAR(2),datediff (second, QueueEndDt,ConnClearDt)/ 60 % 60), 2) + ':' +
    right('0' + convert(VARCHAR(2),datediff (second, QueueEndDt,ConnClearDt)% 60),2)))  as average_minutes
FROM Detail
WHERE QueueEndDt between  '2015-02-09 08:00:00.000' AND '2015-02-09 23:02:33.043'
group by user_id

在不使用平均值和转换的情况下,我得到了正确的 datediff

我用一些数据做了一个http://sqlfiddle.com/#!6/298eb

我想输出的是每个user_id的平均值。

这将 return 您 hh:mm:ss 格式的平均差异。请注意,hh 可能会超过 24。修改查询以添加年、月和日部分。

WITH CTE AS(
    SELECT
        user_id,
        Average_Seconds = AVG(DATEDIFF(SECOND, QueueEndDt, ConnClearDt))
    FROM details
    WHERE
        QueueEndDt BETWEEN  '2015-02-09 08:00:00.000' AND '2015-02-09 23:02:33.043'
    GROUP BY user_id
)
SELECT
    user_id,
    [Average hh:mm:ss] =
          CONVERT(VARCHAR(12), Average_Seconds / 60 / 60) + ':' 
        + RIGHT('00' + CONVERT(VARCHAR(2),  Average_Seconds / 60 % 60), 2) + ':' 
        + RIGHT('00' + CONVERT(VARCHAR(2),  Average_Seconds % 60), 2)
FROM CTE

结果

user_id    Average hh:mm:ss
---------- ------------------
number1    13:44:16
number2    13:50:36
number3    13:46:33