■ Data Skill ■/PL-SQL

PL/SQL (9) - 변환 함수 사용

한길(One Way) 2023. 3. 17.

1. 변환 함수

- 함수 중에서 가장 널리 사용하고 중요한 함수이다.

- 다른 데이터형으로 변환시킨다.

 

2. TO_DATE

- TO_DATE(문자스트링, 서식, NLS_DATE_LANGUAGE)

- 서식을 지정하지 않으면 기본 DATE 형식인 DD-MMM-YY 가 적용된다.

- 변환될 문자는 220자를 넘을 수 없다.

- 12시간제 / 24시간제 중 하나를 선택한다.

- 대표 변환마스크.

MM : 01~12로 월 표시.

MONTH : 월 이름을 9자리 문자로 할당. 나머지 문자는 공백.

MON : 월 이름을 3자리 문자로

D : 1주를 1일~7일

DD : 1달을 1일~31일

DDD : 1년을 1일~365일

DAY : 요일을 철자대로 표기하는 것. 항상 9자리를 차지. 남는 오른쪽 자리는 공백으로

HH, HH12 : 하루를 1~12까지의 시간으로 나타냄

HH24 : 하루를 0~23까지의 시간으로 나타냄

MI : 1시간을 0~59분까지 나타냄

SS : 1분을 0~59초까지 나타냄

SSSS : 자정부터 지난 시간을 모두 초단위로 계산한다.

 

3. TO_CHAR

- 숫자나 날짜를 문자로 변환한다.

- 날짜의 형식을 기본형식인 DD-MMM-YY 와 다르게 출력하고자 할 때.

- MONTH, Month, month => MAY, May, may

 

4. TO_NUMBER

- 문자를 숫자로 변환한다.

- 문자로 저장되어 있는 입사일 기준으로 근속년수를 계산한다고 하면, 입사일을 TO_NUMBER로 변환하여 계산해야 한다.

- 너무 자주 사용되는 곳에는 변환 과정에서 시스템 부하를 줄 수 있다.

- 대표 변환 마스크

9 : 각 9는 의미있는 자리로 간주됨. 앞에 나오는 0은 공백으로 취급.

0 : 숫자 앞이나 뒤에 0이 있을 경우, 0을 취급하기 위함. 09999, 99990

$ : 통화표시. $9999

B : 정수가 0이 아니면 정수의 일부를 공백으로 반환한다. 이 서식에 0을 사용하면 앞에 오는 0은 무시된다. B9999

MI : 값이 음수이면 '-'부호 갖고, 값이 양수이면 끝에 공백을 갖는다. 9999MI

S : 음수면 '-', 양수면 '+' 부호를 갖는다. S9999, 9999S

PR : 음수면 < > 로 묶고, 양수면 공백 추가. 9999PR

D : 소수점 위치 지정. 99D99

G : 분리자를 지정(,) 9G999G999

C : 지정한 위치에 ISO 통화기호를 반환한다. C99

L : 지역 통화기호를 반환한다. L9999

, : 지정한 위치에 콤마 삽입. 9,999,9999

. : 그룹 분리자에 관계 없이 소수점의 위치를 지정. 99.99

V : 10의 n 승. V뒤에 숫자가 10을 곱할 갯수. 999V99

EEEE : 지수 표시. 9.99EEEE

RM, rm : 값을 대문자,소문자로 된 로마숫자로 표시

FM : 앞과 뒤의 공백을 제거. FM9,999.99

 

5. Sample

SQL> select TO_DATE('070528','MMDDYY') "Today" from dual;

Today

---------

05-JUL-28

SQL> select TO_DATE('March 30', 'MONTH DD') from dual;

TO_DATE('

---------

30-MAR-07

 

SQL> select TO_DATE('28-DEC-82') "Birthday" from dual;

Birthday

---------

28-DEC-82

 

SQL> select TO_DATE('070528','YYMMDD')+3 from dual;

TO_DATE('

---------

31-MAY-07

 

SQL> select TO_CHAR(SYSDATE, 'MONTH DDTH YYYY') "Now" from dual;

Now

-----------------------

MAY 28TH 2007 ☞ MONTH → 9자리 채움.

SQL> select TO_CHAR(SYSDATE, 'Month DD, Y,YYY') from dual;

TO_CHAR(SYSDATE,'MONTHD

-----------------------

May 28, 2,007

SQL> select TO_CHAR(SYSDATE, 'YYYY-MM-DD') "Now" from dual;

Now

----------

2007-05-28

SQL> select TO_CHAR(SYSDATE, 'YYYY-MM-DD', 'NLS_DATE_LANGUAGE=german') "German" from dual;

German

----------

2007-05-28

SQL> select TO_CHAR(SYSDATE, 'YYYY-MM-DD', 'NLS_DATE_LANGUAGE=korean') "Korean" from dual;

Korean

----------

2007-05-28

SQL> select TO_NUMBER('100.00', '9G999D99') from dual;

TO_NUMBER('100.00','9G999D99')

------------------------------

100

문자 => 숫자변환 후 100으로 나누는 코드

728x90

댓글