【问题标题】:Error converting data type varchar to numeric when casting varchar(max) to decimal将 varchar(max) 转换为十进制时,将数据类型 varchar 转换为数字时出错
【发布时间】:2013-04-27 16:45:04
【问题描述】:

我正在尝试对两个字符串的值求和。为了做到这一点,我将字符串转换为小数,将它们相加,然后将其转换回字符串以进行输出。还使用 max 来避免重复条目。 我的 SP 中有以下行:

Cast( Max(CASE WHEN QuestionID = 261 THEN CAST(Answer AS decimal) ELSE '' END) + Max(CASE WHEN QuestionID = 260 THEN CAST(Answer AS decimal) ELSE '' END) AS varchar) as Total

Answer 字段为 varchar(max),默认值为 ''。
问题是我收到错误消息:将数据类型 varchar 转换为数字时出错

【问题讨论】:

    标签: tsql stored-procedures sql-server-2008-r2 varchar


    【解决方案1】:

    失败的部分是内壳:

    CASE WHEN QuestionID = 261
         THEN CAST(Answer AS decimal)
         ELSE '' END
    

    CASE 表达式(例如上述)必须仅返回一种数据类型。在这种情况下,它不能同时返回小数和 varchar(空字符串 '')。由于type precedence,任一分支的结果都被转换为小数。如果 ANY 行有 QuestionID != 261,它将尝试将 '' 转换为十进制,并且 bam - 你的错误。

    你需要这个:

    Cast( Max(CASE WHEN QuestionID IN (261,260) AND ISNUMERIC(ANSWER) = 1
                   THEN CAST(Answer AS decimal)
                   ELSE 0 END)
       AS varchar) as Total
    

    【讨论】:

    • 仍然收到错误消息。我找到了一种方法,它不是最优雅的方法,但可以完成工作:` Cast(Max(CASE WHEN QuestionID = 261 THEN CAST(Case When Answer = '' Then 0 Else CAST(Answer as decimal(9,2 )) 以十进制结尾(9,2))End ) + Max(CASE WHEN QuestionID = 260 THEN CAST(CASE When Answer = '' Then 0 Else CAST(Answer as decimal(9,2)) End as decimal(9, 2))End )AS varchar(Max)) as Total`
    • 您的查询现在是什么样的?您是否已将 '' 替换为 0?
    • 我在尝试运行时收到另一条错误消息:警告:空值已被聚合或其他 SET 操作消除。
    • 是的,这行得通,但它显示的结果没有小数位,我也需要它们。即便如此,比我的要小:),谢谢
    • 您只需使用适当的值将答案正确转换为十进制(m,n),例如十进制(12,4)。
    【解决方案2】:

    这有点可读性..

    Cast(Max(CASE WHEN QuestionID = 261 THEN CAST(Case When Answer = '' Then 0 Else CAST(Answer as decimal(9,2)) End as decimal(9,2))End ) + Max(CASE WHEN QuestionID = 260 THEN CAST(Case When Answer = '' Then 0 Else CAST(Answer as decimal(9,2)) End as decimal(9,2))End )AS varchar(Max)) as Total

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多