【问题标题】:How do I fix this data type error? [duplicate]如何修复此数据类型错误? [复制]
【发布时间】:2015-08-19 06:32:27
【问题描述】:

当我在查询中插入以下内容时出现错误

,max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] else '' end)

TotalPaid 是一个包含例如:445.45 的字段。

我收到的信息是:

将数据类型 varchar 转换为数值时出错

但是,这个 case 语句有效:

,max(case when patins.rank = 1.0 then INSCOMP.ORG else '' end)

Inscomp.Org只是给保险公司。

【问题讨论】:

  • TOTALPAID 列的数据类型是什么?
  • ,max(patins.rank = 1.0 然后 CLAIMS.[TOTALPAID] else 0 end)

标签: sql sql-server tsql select case


【解决方案1】:

问题:

字段TOTALPAID 是数字。 Case 语句可以返回 same 数据类型的值。如果满足条件,则尝试返回数值,如果不满足,则尝试返回 varchar 值。这就是问题所在。

解决方案:

  1. 您可以强制转换一个字段以匹配另一个字段的类型

    max(case when patins.rank = 1.0 then CAST(CLAIMS.[TOTALPAID] as varchar(max)) else '' end)
    
  2. 如果需要,您可以返回 NULL。不会有任何问题。

    max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] else NULL end)
    
  3. 或者只是删除“else”部分

    max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] end)
    

    如果条件不满足会返回NULL。

【讨论】:

  • 这很容易......谢谢
  • @JasonClark:很高兴我能帮上忙,我的朋友
【解决方案2】:

case 表达式的所有分支都必须返回相同的数据类型。所以你不能让其中一个返回totalpaid,这是一个数字列,而另一个返回'',这是一个字符串文字。相反,您可以返回一个实际的null

max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] else null end)

实际上,由于case 表达式的默认返回值无论如何都是null,你可以省略else 子句:

max(case when patins.rank = 1.0 then CLAIMS.[TOTALPAID] end)

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 2015-12-01
    • 2015-06-08
    • 2021-10-04
    • 1970-01-01
    • 2021-12-27
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多