【问题标题】:Sql Mathematical calculations [closed]Sql数学计算[关闭]
【发布时间】:2014-01-16 13:01:56
【问题描述】:

我有一些具有相应值的数据库表。现在我想对列进行“总和”。每当我尝试这样做时,它都会产生错误“操作数数据类型 varchar 对 sum 运算符无效”。我有 4 列以 varchar(100) 作为其数据类型。

【问题讨论】:

  • 请向我们展示您的查询。
  • 为什么将数值存储在varchar 列中? (如果他们不是数字,你为什么要SUM他们?)
  • 谢谢马丁·史密斯。它的所有值都是数字。但我使用了varchar。所以我想知道它为什么会产生错误以及如何清除。
  • @ArunkumarMurugesan - 因此您应该将列数据类型更改为更合适的类型。将数字存储为字符串空间效率低下,这意味着您需要一直进行转换,迟早您会得到无效数据。
  • 是的。当然马丁。但现在我清楚了..

标签: sql sql-server


【解决方案1】:

嗯,错误信息很清楚。 “求和”字符串的想法是没有意义的。如果数字确实以字符串表示形式存储,只需使用 cast:

select sum(cast(column as float))

【讨论】:

  • 非常感谢 Gordon Linoff 的回复。现在它的工作。我将所有值存储为数字,我可以使用整数数据类型。但我使用了varchar。我可以知道为什么我们使用浮点数据类型..
  • @ArunkumarMurugesan 。 . .因为您没有指定数字的样子。 floatintunsigned 更通用。如果数字是整数,则转换为适当的类型。更好的是,修复表,以便数据以正确的类型存储。
  • 感谢您的宝贵回答..再次感谢您..
  • 为了使用你的答案,我得到了输出。现在我使用相同的平均值并得到结果为 3.80282051282051 .. 是否有可能获得像 3.80 这样的最小化舍入值。提前谢谢..
  • @ArunkumarMurugesan 。 . .尝试转换为十进制类型,例如decimal(15, 2)
【解决方案2】:

你可以试试这个,然后得到完整的答案

select Round(sum(cast(column as float)),2)

【讨论】:

  • 非常感谢 DhruvJoshi。现在它的工作。我认为这是正常的事情。但我是这方面的初学者。再次感谢您。
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2010-09-27
相关资源
最近更新 更多