Raz*_*aza 0 sql floating-point varchar casting average
当我运行以下查询时,我收到错误"无法将VARCHAR转换为FLOAT".问题是我的团队中的其他人设计了DB一段时间,并将毫秒作为varchar和sSometime值,因为他将"NA"改为"NA".
现在,当我将毫秒的值转换为AVE()时,"NA"无法生成.有没有办法为"NA"定义默认值,如:
IF a.Milliseconds == "NA"
0
ELSE
CAST(a.Milliseconds AS FLOAT)
SELECT
b.Date,
AVG(CAST(a.Milliseconds AS FLOAT)) AS Milliseconds,
FROM Fields a
INNER JOIN Cycles b
ON a.CyclesId = b.Id
GROUP BY b.Date
Sample Data
CyclesId | Milliseconds
1 | 24.1557
2 | 23.4886
3 | NA
Run Code Online (Sandbox Code Playgroud)
使用CASE围绕您的价值的陈述
SELECT
b.Date,
AVG(CAST(CASE WHEN a.Milliseconds = 'NA' THEN '0' ELSE a.Milliseconds END AS FLOAT)) AS Milliseconds,
FROM Fields a
INNER JOIN Cycles b
ON a.CyclesId = b.Id
GROUP BY b.Date
Run Code Online (Sandbox Code Playgroud)
如果您希望将NA所有值排除在一起,那么您将执行以下操作:
SELECT
b.Date,
AVG(CAST(a.Milliseconds AS FLOAT)) AS Milliseconds,
FROM Fields a
INNER JOIN Cycles b
ON a.CyclesId = b.Id
WHERE a.Milliseconds != 'NA'
GROUP BY b.Date
Run Code Online (Sandbox Code Playgroud)
看看SQL Fiddle with Demo