【问题标题】:T-SQL less than percentage - returns 100% even though excluded?T-SQL 小于百分比 - 即使排除也返回 100%?
【发布时间】:2017-03-13 14:16:34
【问题描述】:

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

所以我有

选择 ... 从 ... 其中 ColX_pc

奇怪的是,这会返回所有小于或等于 80% 的值,并排除所有为 null 或 >80% 但

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

【问题讨论】:

  • 那么%字符在字段中,是字符类型吗?如果是这样,'100%' < '80' 是真的,因为你比较的是字符串而不是整数 ...
  • “添加and Colx <> '100.00%' 并没有提供解决方案。这仅仅意味着你已经抑制了你注意到的一种症状。字符串比较不能代替数值比较。
  • @MarkAdelsberger 是的,正确的。请参阅下面的答案,其中概述了此问题的有效解决方案。

标签: sql sql-server tsql


【解决方案1】:

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

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

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

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

【讨论】:

  • 是的,这是正确的。我在发布答案并在上面进行编辑后不久就发现了这一点。我没有注意到 9% - 好点。我会在几分钟后将此标记为答案。
猜你喜欢
  • 2021-06-18
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2013-02-17
  • 2013-08-15
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多