상세 컨텐츠

본문 제목

오라클 문자함수

프로그래밍/DB

by 라제폰 2008. 12. 23. 09:01

본문


문자 함수

문자열을 입력하면 문자열이나 숫자 값을 반환한다.

문자 값 반환 함수

CHR, CONCAT, INITCAP, LOWER, LPAD, LTRIM, REPLACE2, RPAD, RTRIM, SUBSTRB, SUBSTRING, TRANSLATE, TRIM, UPPER

숫자 값 반환 함수

ASCII, CHAR_LENGTH(CHARACTER_LENGTH, LENGTH), INSTR(POSITION), INSTRB, OCTET_LENGTH(LENGTHB), SIZEOF

ASCII

구문

ASCII (char)

설명

문자 식에서 가장 왼쪽 문자의 ASCII 코드 값을 반환한다.

예제

<질의> 문자 'A'를 ASCII 코드로 출력하라.

iSQL> SELECT ASCII ('A') FROM DUAL; 

<결과>

ASCII ('A') -------------- 65 1 row selected. 

CHAR_LENGTH, CHARACTER_LENGTH, LENGTH

구문

CHAR_LENGTH (char)

설명

입력된 문자열(char)의 길이를 돌려준다.

한글 한글자는 2바이트 지만 길이는 1로 출력된다. 단, 알티베이스 프로퍼티 파일의 국가설정 (NLS_USE)을 영문(US7ASCII)으로 설정했을 경우 한글 한글자의 길이는 2로 출력된다. 만일 국가설정을 한글(KO16KSC5601)로 설정할 경우 한글 한글자도 1의 크기로 표시된다.

예제
  • Manager의 주소 길이를 출력한다.

    iSQL> CREATE TABLE MANAGER( MGR_NO INTEGER PRIMARY KEY, MNAME VARCHAR(20), ADDRESS VARCHAR(60)); Create success iSQL> INSERT INTO MANAGER VALUES(1, 'JDLEE', '3101 N. Wabash Ave. Brooklyn, NY'); 1 row inserted. iSQL> INSERT INTO MANAGER VALUES(15, 'HJMIN', '서울 마포구 아현 1'); 1 row inserted. 

    <질의>

    iSQL> SELECT CHAR_LENGTH (ADDRESS) FROM MANAGER; 

    <결과>

    CHAR_LENGTH (ADDRESS) ------------------------ 32 18 2 rows selected. 

    * NLS_USE = KO16KSC5601 인 경우

    <결과>

    CHAR_LENGTH (ADDRESS) ------------------------ 32 11 2 rows selected. 

CHR

구문

CHR (n)

설명

INTEGER ASCII 코드를 문자로 변환하는 문자열 함수이다.

예제

<질의>

iSQL> SELECT CHR(65) || CHR(76) || CHR(84) || CHR(73) || CHR(66) || CHR(65) || CHR(83) || CHR(69) MMDBMS FROM DUAL; 

<결과>

MMDBMS ------------------------------------ ALTIBASE 1 row selected. 

<질의> 다음은 결과가 텍스트로 반환될 때, 줄을 바꿔서 고객의 이름, 전화번호, 우편번호, 주소 정보를 인쇄하기 위해 CHR(10)을 사용하는 예제이다.

iSQL> SELECT CNAME || CHR(10) || SEX || ' ' || CUS_JOB || CHR(10) || ADDRESS CUS_INFO FROM CUSTOMER WHERE CNO = '730828-1201145'; 

<결과>

CUS_INFO ------------------------------------------------ CHLEE M ENGINEER 부산 동구 수정 3 1 row selected. 

* 참고:

제어 문자
CHR(9)
줄 바꿈 CHR(10)
캐리지 리턴 CHR(13)

CONCAT

구문

CONCAT (char1, char2)

설명

첫 번째 문자 값을 두 번째 문자 값에 연결한다.

연결 연산자 (||)와 동일하다.

예제

<질의>

iSQL> SELECT CONCAT(CONCAT(RTRIM(ENAME), '''s job is ' ), EMP_JOB ) JOB FROM EMPLOYEE WHERE ENO = 10; 

<결과>

JOB ------------------------------------------------ YHBAE's job is PROGRAMMER 1 row selected. 

INITCAP

구문

INITCAP (char)

설명

대문자 변환함수

주어진 문자열의 첫 문자를 대문자로 반환한다.

예제

<질의> 'the soap'의 첫 문자를 대문자로 출력하라.

iSQL> SELECT INITCAP ('the soap') Capital FROM DUAL; 

<결과>

CAPITAL ------------ The soap 1 row selected. 

INSTR, POSITION

구문

INSTR (char1, char2)

설명

char1에 입력된 문자열에서 char2에 위치한 문자가 있는 위치를 돌려준다.

가장 왼쪽부터 검색하여 첫번째로 검색된 위치를 반환한다. 만일 일치하는 문자열이 없을 경우 0을 돌려준다.

INSTRB 함수는 지정한 문자의 위치를 문자 단위가 아닌 바이트 단위로 반환한다.

예제

<질의> 문자열 'KSKIM'에서 KIM인 문자의 위치를 출력하라.

iSQL> SELECT INSTR('KSKIM', 'KIM') FROM DUAL; 

<결과>

INSTR('KSKIM', 'KIM') ------------------------ 3 1 row selected. 

<질의> 문자열 'SUBSTRING' 에서 문자 'R'이 나타나는 위치를 바이트 단위로 출력하라.

iSQL> SELECT INSTRB('STRING', 'N') FROM DUAL; 

<결과>

INSTRB('STRING', 'N') ------------------------ 5 1 row selected. 

LOWER

구문

LOWER (char)

설명

소문자 변환함수

입력된 문자를 소문자로 변환한 값을 돌려준다.

예제

<질의> 다음을 소문자로 변환하여 출력하라.

iSQL> SELECT LOWER('ONE PAGE PROPOSAL') Lowercase FROM DUAL; 

<결과>

LOWERCASE --------------------- one page proposal 1 row selected. 

LPAD

구문

LPAD (char1, n [, char2])

설명

첫 번째 문자열 char1의 왼쪽부터 문자열 char2를 (연속적으로) 삽입하여 지정한 길이 n 만큼의 char2가 포함된 char1을 반환한다. char2의 기본 값은 single blank이다. 만약, char1의 길이가 n 보다 길면 char1의 일부만(길이 n)을 반환한다.

예제

<질의> "abc"라는 문자 식의 왼쪽부터 시작하여 "xyz"라는 문자열을 삽입하여 총 10 글자를 반환하는 예이다.

iSQL> SELECT LPAD('abc', 10, 'xyz') LPAD_EX FROM DUAL; 

<결과>

LPAD_EX ------------------------------------------------ xyzxyzxabc 1 row selected. 

LTRIM

구문

LTRIM (char1 [, char2])

설명

char1에 가장 왼쪽 문자부터 char2에 있는 문자들과 비교한다.

char1의 문자열이 char2의 문자와 같으면 삭제한다. 반복적으로 char2에 문자와 일치되는 문자가 없을 때까지 삭제한 결과를 출력한다.

char2는 기본적으로 single blank 이며, 이 경우 char1의 앞(왼쪽)에 있는 빈칸을 모두 삭제한다.

예제

<질의> 문자열 'abaAabLEFT TRIM' 중 가장 왼쪽에 나타나 있는 a와 b를 제외한 문자열을 출력하라.

iSQL> SELECT LTRIM ('abaAabLEFT TRIM', 'ab') LTRIM_EX FROM DUAL; 

<결과>

LTRIM_EX ------------------- AabLEFT TRIM 1 row selected. 

<질의> 고객의 주민등록번호 중에서 뒷자리만 출력하라.

iSQL> SELECT LTRIM (LTRIM(CNO,'1234567890'), '-' ) FROM CUSTOMER; 

<결과>

LTRIM(LTRIM(CNO,'1234567890'), '-' ) ---------------------------------------- 1201145 1345471 1431202 … 20 rows selected. 

OCTET_LENGTH, LENGTHB

구문

OCTET_LENGTH (char)

설명

입력된 문자열(char)의 바이트 크기를 돌려준다.

항상 영문과 숫자는 1바이트, 한글은 2바이트를 사용한다.

예제

<질의> '우리나라'에 할당된 길이를 출력하라. (K016KSC5601로 설정된경우)

iSQL> SELECT OCTET_LENGTH('우리나라') FROM DUAL; 

<결과>

SIZEOF('우리나라') --------------------- 8 1 row selected. 

<질의> Manager의 주소 길이를 출력하라.

iSQL> SELECT OCTET_LENGTH(ADDRESS) FROM MANAGER; 

<결과>

OCTET_LENGTH(ADDRESS) ------------------------ 32 18 2 rows selected. 

* 참고: MANAGER 테이블

 iSQL> CREATE TABLE MANAGER( MGR_NO INTEGER PRIMARY KEY, MNAME VARCHAR(20), ADDRESS VARCHAR(60)); Create success iSQL> INSERT INTO MANAGER VALUES(1, 'JDLEE', '3101 N. Wabash Ave. Brooklyn, NY'); 1 row inserted. iSQL> INSERT INTO MANAGER VALUES(15, 'HJMIN', '서울 마포구 아현 1'); 1 row inserted. 

REPLACE2

구문

REPLACE2 (char , string1 , [string2])

설명

Char중 해당되는 string1은 string2로 치환을 시킨다. String2가 생략되거나 null인 경우 string1은 제거되고 공백 문자라면 char중 해당되는 string1은 공백 문자로 치환된다. 만일 string1이 null이면 char가 반환된다.

TRANSLATE 함수가 대응하는 한 문자에 대해 하나씩 대체되는 것에 반해 REPLACE2 함수는 문자열을 제거시킬 뿐만 아니라 한 문자열을 다른 문자열로 대치한다.

예제

<질의> DEPARTMENT 테이블 중에서 DNAME을 [팀]이 아닌 [부문]으로 치환하라.

iSQL> SELECT REPLACE2(DNAME, '팀', '부문') FROM DEPARTMENT; 

<결과>

REPLACE2(DNAME, '팀', '부문') ------------------------------------------------ 응용기술부문 엔진개발부문 마케팅부문 기획관리부문 영업부문 5 rows selected. 

<질의> 다음 예제는 abcdefghi의 문자열 cde를 xx로 바꾼다.

iSQL> SELECT REPLACE2('abcdefghicde', 'cde', 'xx') FROM DUAL; 

<결과>

REPLACE2('abcdefghicde', 'cde', 'xx') ----------------------------------------- abxxfghixx 1 row selected. 

RPAD

구문

RPAD (char1, n [, char2])

설명

문자열 char1의 오른쪽에 지정한 길이 n이 될 때까지 문자열 char2를 (연속적으로) 삽입한 char1을 반환한다. char2의 기본 값은 single blank이다. 만약, char1의 길이가 n 보다 길면 char1의 일부만(길이 n)을 반환한다.

예제

<질의> "123"이라는 문자 식의 오른쪽에 "0" 문자열을 삽입하여 총 10 자리 숫자를 반환하는 예이다.

iSQL> SELECT TO_NUMBER(RPAD('123', 10, '0')) RPAD_EX FROM DUAL; 

<결과>

RPAD_EX -------------- 1230000000 1 row selected. 

RTRIM

구문

RTRIM (char1 [, char2])

설명

char1에 가장 오른쪽 문자부터 char2 에 있는 문자들과 비교한다.

char1의 문자열이 char2의 문자와 같으면 삭제한다. 반복적으로 char2에 문자와 일치되는 문자가 없을 때까지 삭제한 결과를 출력한다.

char2는 기본적으로 single blank 이며, 이 경우 char1의 뒤(오른쪽)에 오는 빈칸을 모두 삭제한다.

예제

<질의> 문자열 'RIGHTTRIMbaAbab' 중 가장 오른쪽에 나타나 있는 a와 b를 제외한 문자열을 출력하라.

iSQL> SELECT RTRIM ('RIGHTTRIMbaAbab', 'ab') RTRIM_EX FROM DUAL; 

<결과>

RTRIM_EX ------------------- RIGHTTRIMbaA 1 row selected. 

<질의> 고객의 주민등록번호 중에서 앞자리(생년월일)만 출력하라.

iSQL> SELECT RTRIM (RTRIM(CNO,'1234567890'), '-' ) FROM CUSTOMER; 

<결과>

RTRIM(RTRIM(CNO,'1234567890'), '-' ) ---------------------------------------- 730828 771215 711111 … 20 rows selected. 

SIZEOF

구문

SIZEOF (string)

설명

문자열 또는 열에 할당된 크기를 알 수 가 있다. 문자열은 CHAR, VARCHAR, 또는 숫자형 데이터타입이 올 수 있으며 숫자형 데이터타입에 대해서는 VARCHAR로 변환이 된 크기를 되돌려 준다.

OCTET_LENGTH 함수가 입력된 문자열의 크기를 반환하는 것에 반해 SIZEOF 함수는 테이블 생성시 정의된 변수의 크기를 반환한다.

* 참고: 숫자형 데이터타입에 대해서 INTEGER, BIGINT, SMALLINT에 대해서는 각각 20을 반환하며, DECIMAL, FLOAT, NUMBER, NUMERIC, DOUBLE, REAL 등에 대해서는 각각 크기가 45인 값을 반환한다.

예제

<질의> '우리나라'에 할당된 길이를 출력하라. (K016KSC5601로 설정된 경우 한글은 한 문자당 2바이트 길이가 반환된다.)

iSQL> SELECT SIZEOF('우리나라') FROM DUAL; 

<결과>

SIZEOF('우리나라') --------------------- 8 1 row selected. 

<질의> 부서이름에 할당된 길이를 출력하라.

iSQL> SELECT SIZEOF(DNAME) FROM DEPARTMENT; 

<결과>

SIZEOF(DNAME) ---------------- 20 

SUBSTR, SUBSTRING

구문

SUBSTR (string, m [, n])

설명

문자 조작 함수

문자 값의 위치 m번째 문자 부터 시작해서 n개의 지정된 길이의 문자열을 반환한다. (m이 음수면 문자 값의 끝부터 세며 n을 생략하면 문자열의 끝까지 모든 문자가 반환된다.)

문자열은 CHAR 또는 VARCHAR 데이터타입이며, 반환되는 값 역시 문자열로서 같은 데이터타입이다.

SUBSTRB 함수는 지정한 문자의 위치를 문자 단위가 아닌 바이트 단위로 문자열을 반환한다.

예제

<질의> 다음은 문자열 SALESMAN의 1번째 문자부터 시작해서 길이가 5인 substring을 반환하라.

iSQL> SELECT SUBSTR('SALESMAN', 1 ,5) Substring FROM DUAL; 

<결과>

SUBSTRING ------------- SALES 1 row selected. 

<질의> 다음은 ABCDEFG의 substring을 반환한다.

iSQL> SELECT SUBSTR('ABCDEFG', -5 ,4) Substring FROM DUAL; 

<결과>

SUBSTRING ------------- CDEF 1 row selected. 

<질의> 다음은 문자열 'ABCDEFG'에서 5번째 바이트 부터 2 바이트 길이 만큼의 문자를 출력한다.

iSQL> SELECT SUBSTRB('ABCDEFG', 5, 2) Substring_with_bytes FROM DUAL; 

<결과>

SUBSTRING_WITH_BYTES ------------------------ EF 1 row selected. 

TRANSLATE

구문

TRANSLATE (char , string1, string2 )

설명

string1의 각 문자에 대응하는 string2의 각 문자로 교체되어 발생될 수 있는 char를 반환한다. Char에 있는 문자들 중 string1에 있지 않은 문자들은 교체되지 않는다. String1은 string2 보다 더 많은 문자들을 가질수가 있다. 이런 경우, string1 끝에 나머지 문자들은 string2와 대응하는 문자가 없다. 만약, 이러한 나머지 문자들이 char에 있으면 그 문자들은 반환되는 값에서 제거된다. 해당하는 모든 문자를 제거하려면 string2가 empty string이면 가능하다.

예제

<질의> stock이 50000개가 넘는 상품 이름 중에서 M이 들어간 모델을 L로 바꾸어라.

iSQL> SELECT TRANSLATE(GNAME, 'M', 'L') FROM GOODS WHERE STOCK > 50000; 

<결과>

TRANSLATE(GNAME, 'M', 'L') -------------------------------------------- TL-U200 L-190G 2 rows selected. 

<질의> 문자열 중에서 대문자는 소문자로 변환하라.

iSQL> SELECT TRANSLATE('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijlkmnopqrstuvwxyz') FROM DUAL; 

<결과>

TRANSLATE('0123456789ABCDEFGHIJKLMNOPQRS ------------------------------------------------ 0123456789abcdefghijlkmnopqrstuvwxyz0123456789 1 row selected. 

<질의> 다음 SQL 문은 문자열은 제거하고 숫자만 남는 라이센스 번호를 반환한다.

iSQL> SELECT TRANSLATE('3PQR334', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789') License FROM DUAL; 

<결과>

LICENSE ------------------ 3334 1 row selected. 

TRIM

구문

TRIM (char1 [, char2])

설명

char1에 문자열을 char2 에 있는 문자들과 양 방향에서 비교한다.

char1의 문자열이 char2의 문자와 같으면 삭제한다. 반복적으로 char2에 문자와 일치되는 문자가 없을 때까지 삭제한 결과를 출력한다.

char2는 기본적으로 single blank 이며, 이 경우 char1의 앞(왼쪽), 뒤(오른쪽)에 있는 빈칸을 삭제한다.

예제

<질의> 문자열 'abbAaBbAbba' 중 가장 왼쪽과 오른쪽에 나타나 있는 a와 b를 제외한 문자열을 출력하라.

iSQL> SELECT TRIM ('abbAaBbAbba', 'ab') TRIM_EX FROM DUAL; 

<결과>

TRIM_EX --------------- AaBbA 1 row selected. 

<질의> 사원의 이름과 입사월을 출력하라.

iSQL> SELECT ENAME, TRIM (JOIN_DATE ,'1234567890-') FROM EMPLOYEE; 

<결과>

ENAME TRIM (JOIN_DATE ,'1234567890-') ------------------------------------------------ SWNO HJNO NOV HSCHOI JAN … 20 rows selected. 

UPPER

구문

UPPER (char)

설명

대문자 변환함수

입력된 문자를 대문자로 변환한 값을 돌려준다.

예제

<질의> 문자열 Capital을 대문자로 출력하라.

iSQL> SELECT UPPER('Capital') Uppercase FROM DUAL; 

<결과>

UPPERCASE ------------- CAPITAL 1 row selected. 

관련글 더보기