如何将 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
我想获得特定时间段内每个 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