2011-03-17 4 views
1

다음 문장을 SQL Server에서 Oracle로 변환하려고 시도했지만 모든 시도에서 다른 오류가 발생합니다. 누구든지 오라클 친화적 인 것으로 변환하는 방법을 알고 있습니까? 가 동일한 경우SQL 서버를 Oracle으로 변환

select 
    nullif(cast(cast(round(vn02.wheelbase,0,1)-1 as integer) as varchar) + ',' + 
     cast(cast(round(vn02.wheelbase,0,1) as integer) as varchar) + ',' + 
     cast(cast(round(vn02.wheelbase,0,1)+1 as integer) as varchar),'-1,0,1') wheelbase 
from vn02_fullsv vn02 

휠베이스는 플로트 경우, 그것은 '-1,0,1'보고 쉼표 구분 기호 자체에 추가 할 필요가 만약 그렇다면 그것은 null을 반환해야합니다.

도움 주셔서 감사합니다.

+0

열이 BINARY_DOUBLE 또는 BINARY_FLOAT로 선언되지 않으면 실제로 네이티브 부동 소수점 숫자가 아니고 10 진수가됩니다. –

답변

1

이에 가까워 야 당신은 무엇을 찾고 :

select (decode(round(vn02.wheelbase,0)-1||','||round(vn02.wheelbase,0)||','||round(vn02.wheelbase,0)+1, '-1,0,1', null,vn02.wheelbase) 
from vn02_fullsv vn02; 

'||' 문자열을 연결하기 위해 +를 대체하고, nullif를 디코드로 대체합니다. 라운드가 예제와 동일하게 작동합니다.

여기에 Decode에 대한 참조 링크가 있으며 여기에 Round에 대한 참조가 있습니다.

+0

응답에 감사드립니다. 나는 그것을 시도하고 라운드 함수를 말하는 기능에 대한 너무 많은 인수를 말하는 오류가있어. 그래서 나는 그것을 바꿨고 지금은 "잘못된 숫자"오류가납니다. 어떤 아이디어? 디코드 선택 ((라운드 (vn02.wheelbase) -1 || ','| '라운드 (vn02.wheelbase) ||', '|| 라운드 (vn02.wheelbase) +1),' -1,0,1 ', null, vn02.wheelbase) from vn02_fullsv vn02; – pwnerer

+0

@pwnerer 죄송합니다. 지금 수정되었습니다. 그게 효과가있다. 기본적으로 라운드는 소수 자릿수로 반올림하도록 지시하여 작동합니다. 따라서 이것은 가장 가까운 정수로 반올림됩니다. 내가보기에는 그것이 1.6으로 돌아 간다고 말하는 경우에만 나타나는 문제입니다. 2. 문제가 될지 확실하지 않은 경우 보유한 데이터에 따라 다릅니다. –

+0

감사합니다. 나는 여전히 유효하지 않은 숫자 오류를 얻고 있었지만 그 이유는 수행해야 할 캐스팅이 필요했기 때문입니다. SQL을 업데이트했습니다. 당신의 도움을 주셔서 감사합니다! – pwnerer