2012-05-30 47 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