【问题标题】:I'm having problems trying to correct a conversion issue in sql server 2016我在尝试更正 sql server 2016 中的转换问题时遇到问题
【发布时间】:2019-10-10 16:31:34
【问题描述】:

我有一个案例语句,我试图对多个列 int 值求和,然后将求和值格式化为“00000015700+”作为示例,但在 SQL Server 2016 中出现转换错误。

这是错误:

将 varchar 值 '00000015700+' 转换为 数据类型 int。

这是我的代码:

CASE
    WHEN x.Code = 'WRITPREM' AND x.[Description] = 'NEW POLICY' THEN RIGHT('00000000000' + CAST(REPLACE((sum(x.totalPolicy_BIN) + sum(x.totalPolicy_COL) + sum(x.totalPolicy_OTC) + sum(x.totalPolicy_PDM) + sum(x.totalPolicy_MED) +sum(x.totalPolicy_PIP) + sum(x.totalPolicy_REN) + sum(x.totalPolicy_TOW) + sum(x.totalPolicy_UBI) + sum(x.totalPolicy_UPD)),'.','') as varchar(12)) + '+',12)END as TEST

任何帮助/指导将不胜感激。谢谢。

【问题讨论】:

  • 您需要提供更多信息。您查询的表结构和一些示例数据。您要添加的列的数据类型是什么。还要提供整个查询,因为它可能是导致问题的其他原因
  • 您已经颠倒了REPLACECAST 命令。您应该将CAST 值转换为字符串,然后将REPLACE 小数点添加到末尾,然后取该值的RIGHT(..., 12)。另外,问题:您真的想将小数点后的值与数字合并,还是要截断小数点处的值?两者都是处理数字的有效方法,但我只是想确保您确实希望包含后十进制数字。
  • @LaughingVergil,感谢您的帮助。这就是答案。感谢您的时间和帮助。

标签: sql-server tsql


【解决方案1】:

您是sum()ing 的字段之一包含带有“+”号的值。因此,SQL Server 无法将该值转换为整数以转换为 sum()。您似乎正在将该函数应用于非数字列。因此,您至少在其中一列中有意外数据。尝试消除一些sum() 列,以确定哪一列包含有问题的数据。理想情况下,您应该在每一列上都有正确的数据类型,而不会遇到这个问题。

【讨论】:

    【解决方案2】:

    您已颠倒了 REPLACE 和 CAST 命令。您应该将值转换为字符串,然后替换小数点并将加号添加到末尾,然后取该值的 RIGHT(..., 12)。

    【讨论】:

      猜你喜欢
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2021-06-08
      • 1970-01-01
      • 2017-08-25
      相关资源
      最近更新 更多