2013-08-27 3 views
0

Oracle 10g를 사용 중이며 데이터 유형이 varchar2 인 데이터베이스 열 Q1이있는 데이터베이스가 있습니다. 이 열은 주로 float 및 int 값을 포함합니다.오라클에서 문자열을 형식 번호로 변환

값을 가져 오지만 표준 미국 통화 형식의 값 형식을 사용하는 쿼리를 실행하려고합니다. 예를 들어, 값이 3020이면 쿼리는 3,020.00을 반환합니다.

다음을 시도했지만 어느 것도 작동하지 않았습니다.

SELECT TO_CHAR(Q1, '9,999.99') FROM TABLE1; 

ORA-01722: invalid number 
01722. 00000 - "invalid number" 


SELECT TO_CHAR(TO_NUMBER(Q1), '9,999.99') FROM TABLE1; 

ORA-01722: invalid number 
01722. 00000 - "invalid number" 

또한 열 이름 대신 실제 값을 사용하여 시도해 보았습니다. 첫 번째 예제가 작동합니다. - /이 단계 후에

SELECT TO_CHAR('1234', '9,999.99') FROM TABLE1; //returns 1,234.00 

, I 되돌아 가서() TO_NUMBER로 포맷 마스크를 추가하는 시도 : 표 1에 의해 (TO_NUMBER (Q1 '9,999.99') '9,999.99')를 SELECT TO_CHAR;

ORA-01722: invalid number 
01722. 00000 - "invalid number" 

여전히 작동하지 않습니다.

내 열에 대해 이것이 작동하지 않는 이유를 설명 할 수 있습니까? 처음에는 열의 데이터 유형이 number, float 또는 integer가 아니었지만 숫자로 변환 한 후에도 여전히 동일한 오류가 발생했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

대부분 숫자가 아닌 값이 Q1 인 것을 의미합니다.

따라서 여기도

SELECT TO_CHAR(Q1, '9,999.99') 
    FROM table1 
WHERE REGEXP_LIKE(q1, '^[+-]?[.0-9]+$'); 

SELECT CASE WHEN REGEXP_LIKE(q1, '^[+-]?[.0-9]+$') 
      THEN TO_CHAR(Q1, '9,999.99') 
      ELSE '0.00' 
     END q1 
    FROM table1; 

이다 (예컨대 0.00와) 같은 값을 갖는 행을 필터링하거나 대체 SQLFiddle 데모

2

Q1 열은 VARCHAR2입니까? 그런 다음이 그런 짓을 할 것이다 :

select to_char(to_number('3200'), '9,999.00') from dual 

또는 사용하여 테이블/열 참조 :

select to_char(to_number(Q1), '9,999.00') from table1; 

그냥이 열이 숫자 만없이 문자, 특수 문자를 보유하고 희망해야 등 그렇지 않으면 당신은

ORA-01722 얻을 것이다 : 유효하지 않은 번호를

오류가 다시 발생했습니다.

관련 문제