【问题标题】:SQL Convert statementSQL 转换语句
【发布时间】:2011-12-02 20:38:02
【问题描述】:

我需要有关 SQL 转换语句的帮助。我有 NetQuanity (masterTable),它是一个 varchar(15),我有另一个表,其中包含购买价格 (PO TABLE),它是钱。当我尝试在 SQL 视图中将它们相乘时,会出现错误:

【问题讨论】:

  • NetQuanity (masterTable) 这是一个 varchar(15) - 为什么?是否需要将一般数值存储为字符串?
  • 您的 varchar(15) 列中有哪些类型的数据? 'xyz'?数据是否可以转换为数值类型?
  • 真正的修复是修复你的结构。您想用于数学计算的数字数据永远不能存储在 varchar 字段中。您不想在每次需要按预期使用数据时进行昂贵的转换。有时需要重构数据库,这就是其中之一。

标签: sql sql-server


【解决方案1】:

如果您的字段是 VARCHAR,则需要在操作之前转换为适当的数据类型。例如

CAST(myVarCharField as INT) * myIntField

但是请注意,如果您尝试将此字段转换为数字数据类型并且它不是数字,那么您将处于同一条船上。

我建议在您的示例中使用 CAST 而不是 CONVERT,原因在此 SO 帖子中定义如下:

相关:T-SQL Cast versus Convert

【讨论】:

    【解决方案2】:

    也许尝试使用CONVERT 函数? CONVERT(money,NetQuantity).

    【讨论】:

    • 另外,请确保您的varcharcolumn 没有会破坏转换的无效字符。在这种情况下,你会得到类似Cannot convert a char value to money. The char value has incorrect syntax.
    【解决方案3】:

    首先你有一个数据定义问题。 首先是消除主表中的任何非数字条目。

    SELECT whatever FROM masterTable WHERE ISNUMERIC(NetQuanity)=1
    

    下一步是将其作为子查询包含在计算中。
    在此查询中,使用 CONVERT 或 CAST 将有效数量转换为整数。 即

    CONVERT(INT, NetQuantity)
    

    【讨论】:

      猜你喜欢
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2023-03-07
      • 1970-01-01
      • 2013-02-15
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多