在mssql中选择case语句错误

时间:2012-05-30 11:22:39

标签: sql sql-server sql-server-2008

SELECT top 1 
    case 
        when VR = -99999.99 
        then 0 
        else cast((VR*1.732) as decimal(38,3)) 
    end 
FROM pseb.dbo.datasource 
where FeederID=5003
order by datetime desc

以上查询工作正常,但我需要返回varchar值' - '而不是返回0

如果我喜欢那个

SELECT top 1 
    case 
        when VR = -99999.99 
        then '--' 
        else cast((VR*1.732) as decimal(38,3)) 
    end 
FROM pseb.dbo.datasource 
where FeederID=5003
order by datetime desc

表示它返回以下错误:

  

Msg 8114,Level 16,State 5,Line 1转换数据类型varchar时出错   数字。

请帮我解决一下

1 个答案:

答案 0 :(得分:5)

问题是您从同一列返回两种不同的数据类型。 SQL Server的规则是数字类型take precedence超过字符串类型,即在类似你的字符串的情况下转换为数字,不是反过来。

因此,要解决此问题,您可以将您的号码转换为字符串。

一种选择是做这样的事情:

SELECT top 1 
   case when VR = -99999.99 then '--' 
    else 
     cast
      ( 
        cast((VR*1.732) as decimal(38,3)
      ) 
     as varchar(50)) 
    end 
  FROM pseb.dbo.datasource where FeederID=5003 order by datetime desc