【问题标题】:How to limit the character amount you are selecting from如何限制您选择的字符数量
【发布时间】:2019-06-11 14:05:29
【问题描述】:

我正在尝试平均一个字段,这很简单,但是某些值存在一些问题。我知道有些值太大了,我希望按字符数排除它们(我可能最多输入 4 个字符)。

我不熟悉可以执行此操作的 sql 子句。如果有的话那就太好了。

select avg(convert(float,duration)) as averageduration
from AsteriskCalls where ISNUMERIC(duration) = 1

我预计输出在 500-1000 左右,但它是一个 8 位数字。

【问题讨论】:

  • duration 是数字(即使不是float)?你可以使用WHERE duration < 10000
  • 小心ISNUMERIC,它会给出错误的结果(ISNUMERIC('.') 返回 1,ISNUMERIC('') 返回 0,但尝试转换值时则相反)。你真的应该使用TRY_CONVERTTRY_CAST

标签: sql sql-server average


【解决方案1】:

这很容易:

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

【讨论】:

    猜你喜欢
    • 2011-01-04
    • 2019-11-07
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多