본문 바로가기

DataBase/Oracle

[Oracle Database] 형변환(문자열->Number)

※ 기본적으로 개인적인 앎에 대한 메모를 위한 공간입니다. 


 일을 하다보면 컬럼을 문자열로 지정하고 값은 숫자로 넣을 때가 있다. 

왜 그렇게 했는지는 모르겠다. 아마 어떤 거룩한 뜻이 있었던거 같기도 한데 머 일단 넘어가자.


예를 들어 TEMP라는 테이블에 CODE_INDEX 라는 컬럼이 있고, 이 컬럼은 VARCHAR2(2) 라고 

하자, 그 컬럼에 값을 1,2,3...30 까지 순서대로 값을 넣었다고 한다면 일반적으로 우리가 

SELECT CODE_INDEX FROM TEMP 라고 했을때 기대하는 결과물은


CODE_INDEX

1

2

...

10

11

..

30


이와 같은 결과물일 것이다. ORDER BY CODE_INDEX ASC 를 하던 말이다.

하지만 문자열로 지정되어 있는 컬럼은 SELECT를 해보면


CODE_INDEX

1

10

11

...

2

21

22

...

30


이렇게 나타난다. 원하던 결과물과는 좀 다르다. 

해결하는 방법은 컬럼을 NUMBER(?)와 같이 바꾸는 방법이 좋겠으나. 일단 그렇게 바꾸는게

손쉽지 않은 결정이라면 간단하게 TO_NUMBER 를 사용하는 방법이 있다. 


to_number( string1, [ format_mask ], [ nls_language ] )


string1 is the string that will be converted to a number.

format_mask is optional. This is the format that will be used to convert string1 to a number.

nls_language is optional. This is the nls language used to convert string1 to a number.


Applies To:

  • Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g


즉, 예를 들면 SELECT CODE_INDEX FROM TEMP ORDER BY TO_NUMBER(CODE_INDEX) ASC;

머 이런식으로 하면 된다는.... 간단한데?