2012-05-30 228 views
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选择case语句错误

,如果我做这样的

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 Error converting data type varchar to numeric.

请帮我解决这个问题

回答

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