0
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

意味着它返回以下错误:

消息 8114,级别 16,状态 5,第 1 行将数据类型 varchar 转换为数字时出错。

请帮我解决它

4

1 回答 1

5

问题是您从同一列返回两种不同的数据类型。SQL Server 的规则是数字类型优先于字符串类型,即在像您这样的情况下,字符串被转换为数字,而不是相反。

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

一种选择是执行以下操作:

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
于 2012-05-30T11:26:08.257 回答