【问题标题】:Cast giving an error演员给出一个错误
【发布时间】:2015-12-17 20:13:33
【问题描述】:

为什么这个简单的代码给我一个错误:

将 varchar 值“3.0”转换为数据类型时转换失败 诠释。

select cast(value as INT)  
from CV3BasicObservation  (nolock)
where value >= 110

【问题讨论】:

  • value 列是什么数据类型?
  • cast('3.0' as int) 不起作用,这有点令人惊讶,但你为什么要在 varchar 列中存储数字?
  • 我不明白这个问题,错误信息已经告诉你你需要知道的一切,它不能将varchar值'3.0'转换为数据类型int。显然,这就是该代码给您错误的原因。
  • 我必须如何获得大于 110 的值,我完全理解错误消息

标签: sql-server


【解决方案1】:

SQL Server 不希望将看起来像小数的数字字符串转换为整数,因为这样可能会丢失精度。你可以用 round 函数来欺骗它:

select cast(round(value,0) as INT)  
from CV3BasicObservation  (nolock)
where cast(round(value,0) as INT) >= 110

注意:您必须对字段 value 的所有实例执行此操作,其中您将其显式转换为 int 或隐式转换它以比较 int 类型值。

【讨论】:

  • 您必须对您在查询中使用该字段的所有实例执行此操作。查看对我的答案的修改。
  • 我确实添加了这一点,即使这样我也遇到了同样的错误 - 将数据类型 varchar 转换为 float 时出错。
  • 它给出错误的值在 0.2 和
  • 您的某些字段中必须有其他非数字数据。
  • 这些是此列中不同类型的值 0.2 134 4.9 93 29 80 5.5 220 2 0000 - 68.7
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 2013-02-18
  • 2016-10-20
相关资源
最近更新 更多