2012-05-30 2 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 값을 반환 할 필요가 - 내가 그Select 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 

같이 할 경우 대신 0

을 반환하는 '' 그것은 다음과 같은 오류를 반환 의미하는 것은 :

Msg 8114, Level 16, State 5, Line 1 Error converting data type varchar to numeric.

그것을

를 해결하기 위해 저를 도와주세요 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 
:

하나의 옵션은 같은 것을 할 것입니다