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

上記のクエリは正常に動作していますが、0 を返す代わりに varchar 値 '--' を返す必要があります

もし私がそれを好きなら

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

問題は、同じ列から 2 つの異なるデータ型を返すことです。数値型が文字列型よりも優先されるという SQL Server のルール。

これを解決するには、数値を文字列にキャストします。

1 つのオプションは、次のようにすることです。

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 に答える