我需要找到列x中的单元格(百分比)小于或等于80%的所有行。
所以我有
选择 ... 从 ... 其中ColX_pc< ='80'。
奇怪的是,这会返回小于或等于80%的所有值,并排除所有值为null或> 80%但<100%的值。但是,它还返回所有100%的值。我对此感到困惑,并认为它与转换有关?
更新 - 我意识到现在造成这种情况的原因 - 该列是varchar,因此100%被视为“小于”80%。最佳解决方案在下面的答案中确定。
答案 0 :(得分:3)
为什么要将数字存储为字符串?当你这样做时,你得到 string 比较。如果要比较数字,请转换为数字:
where try_convert(numeric(38, 6), replace(ColX_pc, '%', '')) <= 80
使用字符串比较,'100%'
小于'80%'
,因为'1'
&lt; '8'
。
您也缺少'9%'
,但您可能没有注意到。