2011-04-25 3 views
0

는 SQL 표 (거래)이 세 개의 필드 AvgProfit, MinProfit 및 보류가 - 홀드가 계산 된 콜럼입니다 ... SQL 컴퓨터 열 수식

AvgProfit < MinProfit은 = '보류'와 AvgProfit> MinProfit 경우를 누른 경우

, 보류 = '거래' 보류에 대한 계산 된 수식은 다음과 같습니다.

SQL Table Trades 
AvgProfit varchar(35) 
MinProfit varchar(35) 
Hold varchar(35) 


(case when CONVERT([decimal](8,4),isnull([AvgProfit],(0)),(0))>=CONVERT([decimal](8,4),isnull([MinProfit],(0)),(0)) then 'Trade' else 'Hold' end) 

문제 : 업데이트는 AvgProfit이 시간에 비어의 원인이 될 수 있고, 테이블 내가 어떻게 추가합니까

'Error Converting varchar to numeric' 

은 위의 공식에 NULL 또는 비어 보류 식을 참조 할 때이 오류가 발생 ISNULL은 AvgProfit = ''을 잡지 못합니다.

+0

왜 AvgProfit과 MinProfit을 varchar로 저장해야합니까? –

답변

0

paxdiablo에서 제안한대로 10 진수 또는 숫자 열로 데이터베이스를 입력 해보십시오. 해당 열이 varchar로 설정된 이유가 있습니까?

또는 varchar 열을 유지해야하는 경우 ISNUMERIC(), http://msdn.microsoft.com/en-us/library/ms186272.aspx을 사용해보십시오. 모든 공통 SQL 숫자 유형과 함 2 작동합니다. 그래서 당신이 될 수도 조회 :

ISNUMERIC은 다음과 같이 사용할 수 있습니다

select case when ISNUMERIC('123') = 1 then 1 else 0 end ' returns 1 
select case when ISNUMERIC('xyz') = 1 then 1 else 0 end ' returns 0 
select case when ISNUMERIC(null) = 1 then 1 else 0 end ' returns 0 

그래서 쿼리가 될 수 있습니다 유사한

case when isnumeric(AvgProfit) = 1 THEN case([AvgProfit] as decimal) else 0 END 

또는 무언가를.

0

varchar 숫자 데이터의 경우 이 아닌 가변 크기의 CHARacter 열에 사용해야합니다.

즉, 그들은 이 아니어야합니다.이 비어 있어야합니다 (물론 NULL은 아니지만 처리했습니다). 모두 NULL 확인, 즉

select case when xyz = '' then 0 when isnull(xyz) then 0 else xyz end ... 

과 : 당신이 어떤 이유로 그 작은 감독을 해결할 수없는 경우

, 당신은 뭔가를 수행하여 쿼리 훨씬 더 복잡하고 느린 :-)을 만들 수 있습니다 비어 있습니다. varchar 값입니다.

나 자신, 장기적으로 당신에게 더 나을 것이기 때문에 나는 스키마를 고칠 것입니다. 나는 그저 당신이 할 수없는 기회에 다른 해결책을 제시하고있을뿐입니다.