T-SQL小于百分比 - 即使被排除,也会返回100%?

时间:2017-03-13 14:16:34

标签: sql sql-server tsql

我需要找到列x中的单元格(百分比)小于或等于80%的所有行。

所以我有

选择 ... 从 ... 其中ColX_pc< ='80'。

奇怪的是,这会返回小于或等于80%的所有值,并排除所有值为null或> 80%但<100%的值。但是,它还返回所有100%的值。我对此感到困惑,并认为它与转换有关?

更新 - 我意识到现在造成这种情况的原因 - 该列是varchar,因此100%被视为“小于”80%。最佳解决方案在下面的答案中确定。

1 个答案:

答案 0 :(得分:3)

为什么要将数字存储为字符串?当你这样做时,你得到 string 比较。如果要比较数字,请转换为数字:

where try_convert(numeric(38, 6), replace(ColX_pc, '%', '')) <= 80

使用字符串比较,'100%'小于'80%',因为'1'&lt; '8'

您也缺少'9%',但您可能没有注意到。