如何修复此数据类型错误?

时间:2015-08-19 06:32:27

标签: sql sql-server tsql select case

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

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

TotalPaid是一个字段,其中包含:445.45

我收到的信息是:

  

将数据类型varchar转换为数字

时出错

但是,这个案例陈述有效:

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

Inscomp.Org只给保险公司。

2 个答案:

答案 0 :(得分:1)

<强>问题:

字段TOTALPAID是数字。 Case语句可以返回相同数据类型的值。您正在尝试在满足条件时返回数值,如果不满足则尝试返回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. 或者只是删除“其他”部分

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

    如果不满足条件,它将返回NULL。

答案 1 :(得分:1)

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)