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

时间:2015-02-13 00:54:01

标签: sql-server sql-server-2012

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

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

  

转换varchar值时转换失败' 08:36'数据   输入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的平均值。

1 个答案:

答案 0 :(得分:1)

这将返回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

<强> RESULT

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