2010-06-09 3 views
2

내 프로젝트에 두 개의 다른 데이터베이스, 즉 Oracle 및 Apache Derby를 사용하고 있으며 두 데이터베이스에서 모두 지원되는 ANSI SQL 구문을 가능한 많이 사용하려고합니다.서식에 ansi sql 구문 사용 숫자

amount_paid NUMERIC(26,2) 열이있는 테이블이 있습니다.

내가 ANSI의 SQL 구문을 사용하여 형식 '9,999,999,999,999.99'에서 같은 숫자 값을 문자열로 변환 할 수있는 방법이 형식

SELECT LTRIM(TO_CHAR(amount_paid,'9,999,999,999,999.99')) 

에서 값을 검색하는 데 필요한 오라클 DB를 사용하고있었습니다 내에서 예전의 코드를,?

답변

5

저는 이것이 잘못된 접근이라고 생각합니다. 형식 마스크는 표시 용이므로 실제 프레젠테이션 레이어의 관심사 여야합니다. 모든 데이터 액세스 레이어는 다음을 실행하기 만하면됩니다.

select amount_paid 
from your_table 
where .... 

이 구문은 앱이 연결된 모든 데이터베이스에서 작동합니다.

그런 다음 서식 코드가 속한 프런트 엔드에 배치하십시오.

1

내 지식은 추상적 인 것이 아니지만 내가 아는 한 ANSI 기능이 당신이 원하는 것을 할 수있는 것은 아닙니다 (비록 내가 틀렸다는 것을 알게되어 기쁠지라도 .-)). CONVERT는 문자 집합간에 변환을하지만, 내가 볼 수있는 것처럼 원하는 서식 작업을 수행하지 않습니다. CAST는 데이터 유형간에 값을 변환하지만 다시 형식을 지정하지는 않습니다.

Derby가 Oracle 스타일 TO_CHAR 함수를 지원하지 않으면 자신의 함수를 롤백해야 할 수도 있습니다. MY_TO_CHAR이라고 부르 자. 오라클에서 구현 더비에서 적절한 값과 형식을 취하고 더비 형식 문자열로 TO_CHAR의 더비의 동등한를 호출, 유사한 방식으로이 함수를 정의 할 것

FUNCTION MY_TO_CHAR(nValue IN NUMBER, 
        strOracle_format IN VARCHAR2, 
        strDerby_format IN VARCHAR2) 
    RETURN VARCHAR2 
IS BEGIN 
    RETURN TO_CHAR(nValue, strOracle_format); 
END MY_TO_CHAR; 

수 있습니다.

편집 : @APC에 동의합니다. 기본적으로 프런트 엔드 작업을 수행하기 위해 백엔드가 필요하지 않은 경우 이러한 문제가 많이 사라집니다.

공유하고 즐기십시오.