Это достаточно просто:
select avg(convert(float,duration)) as averageduration
from AsteriskCalls
where ISNUMERIC(duration) = 1 and length(duration) <= 4;
Это не обязательно будет работать, конечно, потому что вы могли бы иметь '1E30'
, что было бы довольно большим числом.И он пропустит '0.001'
, что является довольно небольшим числом.
Более точный метод использует try_convert()
:
select avg(try_convert(float, duration)) as averageduration
from AsteriskCalls
where try_convert(float, duration) <= 1000.0
И это, вероятно, действительно должно быть:
where abs(try_convert(float, duration)) <= 1000.0