콘텐츠로 이동

문자 함수

문자 함수#

문자 함수는 문자 또는 문자열을 입력 받아서 문자나 숫자 값을 반환한다. 이들은 반환하는 데이터 타입에 따라서 크게 두 가지 종류로 분류될 수 있다.

문자 값을 반환하는 문자 함수#

CHR, CHOSUNG, CONCAT, DIGITS, INITCAP, LOWER, LPAD, LTRIM, NCHR, PKCS7PAD16, PKCS7UNPAD16, RANDOM_STRING, REGEXP_REPLACE, REGEXP_SUBSTR, REPLICATE, REPLACE2, REVERSE_STR, RPAD, RTRIM, STUFF, SUBSTRB(SUBSTR, SUBSTRING), TRANSLATE, TRIM, UPPER

숫자 값을 반환하는 문자 함수#

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

ASCII#

구문#

ASCII (expr)

설명#

문자 식 expr에서 가장 첫 (즉, 왼쪽) 문자의 ASCII 코드 값을 반환한다.

예제#

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

SELECT ASCII('A') FROM DUAL;
ASCII('A')  
--------------
65          
1 ROW SELECTED.

CHAR_LENGTH, CHARACTER_LENGTH, LENGTH#

구문#

CHAR_LENGTH (expr)
CHARACTER_LENGTH (expr)
LENGTH (expr)

설명#

입력 문자열의 길이를 돌려준다.

예제#

<질의> 관리자 테이블에서 주소의 길이를 출력하라. 단, 데이터베이스 캐릭터 셋이 KO16KSC5601 이다.

CREATE TABLE managers
(  mgr_no       INTEGER PRIMARY KEY, 
   m_lastname   VARCHAR(20), 
   m_firstname  VARCHAR(20), 
   address      VARCHAR(60)
);

INSERT INTO managers 
VALUES(1, 'Jones', 'Davey', '3101 N. Wabash Ave. Brooklyn, NY');

INSERT INTO managers 
VALUES(15, 'Min', 'Sujin', '서울 마포구 아현 1');

SELECT CHAR_LENGTH(address) FROM managers;
CHAR_LENGTH (ADDRESS)
------------------------
32
11
2 rows selected.

CHOSUNG#

구문#

CHOSUNG (expr1)

설명#

이 함수는 입력한 한글 문자열에서 각 글자의 초성만 추출하여 반환한다. expr1에는 CHAR, VARCHAR 데이터 타입의 문자열이 올 수 있다. 한글 이외의 언어로 된 문자열을 입력 문자열로 사용하면 입력 문자열이 그대로 반환된다.

주의

문자집합(character set)이 KSC5601인 데이터베이스의 CHAR, VARCHAR 데이터 타입 칼럼을 입력 문자열로 사용할 때에만 초성이 정확하게 반환된다. 유니코드를 사용하는 NCHAR, NVARCHAR 데이터 타입의 칼럼을 입력 문자열로 사용하면 초성이 정확하게 반환되지 않으므로 주의하라.

예제#

<질의> '알티베이스'에서 초성을 추출하라.

SELECT CHOSUNG('알티베이스') chosung FROM DUAL;
CHOSUNG
-----------
ㅇㅌㅂㅇㅅ
1 row selected.

CHR#

구문#

CHR (n)

설명#

입력 ASCII 코드값을 해당하는 문자로 변환하는 함수이다.

예제#

<질의> 'ALTIBASE'를 ASCII 코드값을 이용해서 출력하기.

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.

<질의> SELECT 질의 결과를 적절한 포맷으로 출력하기 위해 ASCII 코드 값 10을 갖는 줄 바꿈 문자를 이용해라.

SELECT RTRIM(c_firstname) || ' ' || c_lastname || CHR(10) || sex || ' ' || cus_job || CHR(10) || address cus_info
  FROM customers
 WHERE cno = 10;
CUS_INFO                                                                                                        
------------------------------------------------
Anh Dung Nguyen
M
8A Ton Duc Thang Street District 1 HCMC Vietnam
1 row selected.

참고#

제어 문자 ASCII 코드 값
9
줄 바꿈 10
캐리지 리턴 13

CONCAT#

구문#

CONCAT (expr1, expr2)

설명#

expr1expr2를 연결한 문자열을 반환한다. 이 함수는 연결 연산자 (||)와 동일하다.

예제#

SELECT CONCAT(CONCAT(CONCAT(CONCAT(CONCAT(RTRIM(e_firstname), ' '), RTRIM(e_lastname)), ' is a ' ), emp_job ), '.') job
  FROM employees
 WHERE eno = 10;
JOB
-------------------------------------------------------------------
Elizabeth Bae is a programmer.
1 row selected.

DIGITS#

구문#

DIGITS (n)

설명#

입력 정수를 문자열로 반환한다.

n의 데이터 형에 따라서 다른 길이의 문자열이 반환된다. SMALLINT 일 경우 5자리, INTEGER일 경우 10자리, BIGINT일 경우 19 자리의 문자열이 반환된다. 입력 수의 자리 수가 문자열의 자리수보다 작을 경우 앞 부분이 0으로 채워진다.

예제#

<질의> 다른 숫자 데이터 형의 세 입력 숫자를 문자열로 출력하라.

CREATE TABLE t1 (i1 SMALLINT, i2 INTEGER, i3 BIGINT);
INSERT INTO t1 VALUES (357, 12, 5000);

SELECT DIGITS(i1)
     , DIGITS(i2)
     , DIGITS(i3)
  FROM t1;
DIGITS(I1)  DIGITS(I2)  DIGITS(I3)           
------------------------------------------------
00357  0000000012  0000000000000005000  
1 row selected.

INITCAP#

구문#

INITCAP (expr)

설명#

이 함수는 입력 문자열의 각 단어의 첫 번째 문자를 대문자로 변환해서 그 결과를 반환한다. 단어는 공백, 또는 문자나 숫자가 아닌 문자로 구분된다.

예제#

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

SELECT INITCAP ('the soap') capital FROM DUAL;
CAPITAL
------------
The Soap
1 row selected.

INSTR, INSTRB, POSITION#

구문#

INSTR (expr, substring [, start [, occurrence]])
INSTRB (expr, substring [,start [, occurrence]])
POSITION (expr, substring [,start [, occurrence]])

설명#

INSTR 함수는 입력 expr 문자열에서 substring을 찾아서 substring의 첫 번째 문자의 위치를 반환한다. substring이 없으면 0이 반환된다. INSTRB 함수는 지정한 문자열의 위치를 문자 단위가 아닌 바이트 단위로 반환한다.

startexpr 내에서 탐색을 시작하는 위치를 가리킨다. 기본 start 값은 1, 즉 첫 번째 문자이다. 음수이면 expr 의 맨 끝에서부터 찾기 시작한다. 0으로 지정하면 0이 반환된다. start 값이 expr의 길이보다 크면 에러가 발생한다.

occurrenceexpr내에서 몇 번째 나타나는 substring의 위치를 반환할 지를 가리킨다. 기본값은 1이다. occurrence가 1이면 처음 탐색되는 substring의 위치를 반환한다. occurrence가 2이면 두 번째로 나타나는 substring의 위치를 반환한다. 이 값이 0이거나, expr 내에서 찾을 수 있는 substring의 개수보다 더 크면 이 함수는 0을 반환한다. 음수로 설정하면 에러가 발생한다.

INSTRB, POSITION 함수는 INSTR과 같은 함수이다.

예제#

<질의> 문자열 'CORPORATE FLOOR'에서 'OR'의 위치를, 앞에서 3번째 문자부터 탐색을 시작하여 2번째로 탐색된 문자열의 위치를 출력하라.

SELECT INSTR ('CORPORATE FLOOR','OR', 3, 2) instring FROM DUAL;
INSTRING    
--------------
14          
1 row selected.

<질의> 문자열 '알티베이스5 데이터베이스'에서 '베이'의 위치를 뒤에서 3번째 문자부터 탐색을 시작하여 2번째로 탐색된 문자열의 위치를 출력하라. (단, 데이터베이스 문자 집합이 KO16KSC5601로 설정되어 있다.)

SELECT INSTR ('알티베이스5 데이터베이스','베이', 3, 2) instring FROM DUAL;
INSTRING    
--------------
11          
1 row selected.

LOWER#

구문#

LOWER (expr)

설명#

이 함수는 입력된 문자열의 모든 문자를 소문자로 변환한 문자열을 반환한다.

예제#

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

SELECT LOWER('ONE PAGE PROPOSAL') lowercase FROM DUAL;
LOWERCASE          
---------------------
one page proposal  
1 row selected.

LPAD#

구문#

LPAD (expr1, n [,expr2])

설명#

이 함수는 expr1의 왼쪽에 expr2를 전체 길이가 n이 될 때까지 반복적으로 삽입하여 그 결과를 반환한다. expr2를 명시하지 않으면, 공백 문자가 삽입된다. 만약, expr1의 길이가 n 보다 길면 expr1의 왼쪽부터 길이 n만큼의 문자열을 반환한다.

n은 바이트의 개수가 아니라 문자 개수를 의미하므로 사용하는 언어(설정된 문자 집합)에 따라 문자열의 바이트 크기는 다를 수 있다.

예제#

<질의> 다음은 "abc"라는 문자열의 왼쪽에 "xyz"라는 문자열을 삽입하여 총 10 글자를 반환하는 예이다.

SELECT LPAD('abc', 10, 'xyz') lpad_ex FROM DUAL;
LPAD_EX     
------------------------------------------------
xyzxyzxabc  
1 row selected.

LTRIM#

구문#

LTRIM (expr1 [,expr2])

설명#

expr1의 가장 왼쪽 문자부터 시작해서 expr1의 각 문자들과 expr2의 각 문자들을 비교한다. expr1의 현재 문자가 expr2에 있는 한 문자와 같으면 expr1의 문자를 삭제한다. 이 과정을 expr1의 현재 문자와 일치하는 문자가 expr2에 없을 때까지 삭제하여 그 결과를 출력한다.

expr2의 기본값은 한 개의 공백이다. 그러므로, expr2가 생략된 경우 expr1의 앞(왼쪽)에 있는 공백이 모두 제거된다.

예제#

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

SELECT LTRIM ('abaAabLEFT TRIM', 'ab') ltrim_ex FROM DUAL;
LTRIM_EX         
-------------------
AabLEFT TRIM     
1 row selected.

<질의> 각 사원의 입사일 정보에서 날짜를 제거하여 입사 년월만 출력하라.

SELECT e_lastname
     , LTRIM(LTRIM(join_date, '1234567890'), '-') join_month
  FROM employees;
E_LASTNAME            JOIN_MONTH
-----------------------------------------------------------
.
.
.
Ghorbani              DEC-2009
Momoi                 SEP-2010
Fleischer             JAN-2004
Wang                  NOV-2009
.
.
.
20 rows selected.

NCHR#

구문#

NCHR (n)

설명#

이 함수는 국가 문자 집합(national character set)에서 n 값에 해당하는 문자를 반환한다. 반환 값의 데이터 타입은 NVARCHAR이다.

예제#

내셔날 캐릭터 셋의 187(U+00BB)을 문자로 나타낸다.

SELECT NCHR(187) FROM DUAL;
NC
--
>>
1 row selected.

OCTET_LENGTH, LENGTHB#

구문#

OCTET_LENGTH (expr)

설명#

이 함수는 입력된 문자열의 길이를 바이트 단위로 돌려준다.

문자열의 바이트 길이는 데이터베이스 캐릭터 셋 또는 내셔날 캐릭터 셋에 따라 다르다.

LENGTHB는 OCTET_LENGTH와 같은 함수이다.

예제#

<질의> 문자열 '우리나라'의 길이를 바이트 단위로 출력하라. (단, 데이터베이스 캐릭터 셋이 K016KSC5601로 설정되어 있다.)

SELECT OCTET_LENGTH('우리나라') FROM DUAL;
OCTET_LENGTH('우리나라') 
---------------------------
8           
1 row selected.

<질의> 관리자 테이블에서 주소의 길이를 바이트 단위로 출력하라.

SELECT OCTET_LENGTH(address)
  FROM managers;
OCTET_LENGTH(ADDRESS) 
------------------------
32          
18          
2 rows selected.

PKCS7PAD16#

구문#

PKCS7PAD16 (expr)

설명#

이 함수는 expr의 전체 바이트 길이를 16의 배수에 맞춰준다. 이 함수는 8 또는 16의 배수 길이의 문자열만 입력할 수 있는 암복호화 함수를 사용할 때 유용하다.

입력된 데이터의 길이를 16의 배수에 맞추기 위한 패딩 규칙은 다음과 같다.

  • 문자열의 길이가 16의 배수보다 부족한 경우:

    부족한 문자열의 숫자만큼 입력 값 뒤에 문자가 채워진다. 예를 들어, 4바이트가 부족한 경우 "0x04" 문자 4개가 패딩된다.

  • 문자열의 길이가 16의 배수인 경우:

    마지막 문자열 뒤에 "0x10(16)" 문자가 채워진다.

예제#

AESDECRYPT 함수의 예제를 참조하라.

PKCS7UNPAD16#

구문#

PKCS7UNPAD16 (expr)

설명#

이 함수는 PKCS7PAD16() 함수를 이용하여 생성된 16의 배수 길이 바이트 문자열을 패딩되기 전의 데이터로 복원한다. 하지만 expr이 PKCS7PAD16 함수의 패딩 규칙에 의해 생성된 문자열이 아닌 경우에는 에러가 발생한다.

이 함수는 8 또는 16의 배수 길이의 문자열만 입력할 수 있는 암복호화 함수를 사용할 때 유용하다.

예제#

AESDECRYPT 함수의 예제를 참조하라.

RANDOM_STRING#

구문#

RANDOM_STRING (option, length)

설명#

option에서 명시한 형태로 length의 길이만큼 임의의 문자열을 생성한다. 이 함수의 반환형은 VARCHAR이다.

length에는 임의로 생성할 문자열의 길이를 명시하며, 0 ~ 4000까지 입력이 가능하다. option에는 아래의 파라미터 중 하나를 명시할 수 있다.

  • 'u', 'U'

    알파벳 문자 중에서 대문자의 문자열을 임의로 생성

  • 'l', 'L'

    알파벳 문자 중에서 소문자의 문자열을 임의로 생성

  • 'a', 'A'

    대소문자를 구문하지 않고 알파벳 문자를 임의로 생성

  • 'x', 'X'

    대문자와 숫자를 임의로 생성

  • 'p', 'P'

    프린트할 수 있는 모든 문자를 임의로 생성

예제#

<질의>

SELECT RANDOM_STRING( 'U', 10 ) FROM DUAL;
RANDOM_STRING( 'U', 10 )
---------------------------
BCJVFUMXPK
1 row selected.
SELECT RANDOM_STRING( 'l', 10 ) FROM DUAL;
RANDOM_STRING( 'l', 10 )
----------------------------
fgddcmpydo
1 row selected.
SELECT RANDOM_STRING( 'p', 10 ) FROM DUAL;
RANDOM_STRING( 'p', 10 )
----------------------------
fEn$bLq6jZ
1 row selected.

REGEXP_COUNT#

구문#

REGEXP_COUNT (expr, pattern_expr[, start])

설명#

이 함수는 문자열 exprstart 위치부터 pattern_expr이 나타나는 횟수를 반환한다.

pattern_expr 에는 이 함수를 이용하여 찾으려는 정규 표현식 패턴을 입력하며, 최대 1024 바이트까지 입력할 수 있다. 만약 exprpattern_expr의 데이터 타입이 다른 경우에는 pattern_expr의 데이터 타입이 expr의 데이터 타입으로 변환된다.

start는 검색을 시작할 위치이며, 0이 아닌 양수를 입력한다. 이 값을 생략할 경우 기본값은 1이며, 입력된 expr 문자열의 첫 번째 문자부터 검색을 시작한다.

pattern_expr에는 검색 패턴을 정규 표현식으로 표현한 값이 올 수 있다. 정규 표현식에 대한 자세한 설명은 "부록 A. 정규 표현식"을 참고하라.

예제#

<질의> 입력한 문자열에서 'Guro'라는 표현이 처음부터 몇 번 나타나는지 출력한다.

SELECT REGEXP_COUNT('Daerungpost-Tower II Guro-3 Dong, Guro-gu Seoul', 'Guro', 1) "REGEXP_COUNT"
  FROM DUAL;
REGEXP_COUNT
---------------
2
1 row selected.

<질의> 입력한 문자열에서 띄어쓰기가 없는 substring이 처음부터 몇 번 나타나는지 출력한다.

SELECT REGEXP_COUNT('Daerungpost-Tower II Guro-3 Dong, Guro-gu Seoul', '[^ ]+', 1) "REGEXP_COUNT"
  FROM DUAL;
REGEXP_COUNT
---------------
6
1 row selected.

REGEXP_INSTR#

구문#

REGEXP_INSTR (expr, pattern_expr [, start [, occurrence]])

설명#

REGEXP_INSTR는 INSTR 함수의 기능을 확장한 함수이다.

두 번째 인자에 찾으려는 문자열 대신에 정규 표현식 패턴이 오는 것과 start에 양수만 올 수 있는 것이 INSTR 함수와 다른 점이다. pattern_expr에는 최대 1024바이트까지 입력할 수 있다. 그 외의 인자는 INSTR 함수와 동일하므로 INSTR 함수의 설명을 참조하기 바란다.

pattern_expr에는 검색 패턴을 정규 표현식으로 표현한 값이 올 수 있다. 정규 표현식에 대한 자세한 설명은 "부록 A. 정규 표현식"을 참고하라.

예제#

<질의> 다음 예제는 문자열에서 공백이 포함되지 않은 substring의 출현을 찾는다. 5번째로 나타나는 공백이 포함되지 않은 substring의 첫 위치를 출력한다.

SELECT REGEXP_INSTR('Daerungpost-Tower II Guro-3 Dong, Guro-gu Seoul', '[^ ]+', 1, 5) "REGEXP_INSTR"
  FROM DUAL;
REGEXP_INSTR
---------------
35
1 row selected.

REGEXP_REPLACE#

구문#

REGEXP_REPLACE (expr, pattern_expr [, replace_string [, start [,occurrence]]])

설명#

이 함수는 expr에서 pattern_expr과 일치하는 문자열을 찾아서 다른 문자로 치환하거나 제거한다.

pattern_expr에는 이 함수를 이용하여 찾으려는 정규 표현식 패턴을 입력하며, 최대 1024 바이트까지 입력할 수 있다. 만약 pattern_expr이 빈 문자열이거나 NULL이면 expr이 그대로 반환된다.

replace_string을 입력하면 expr에서 일치하는 문자열을 replace_string으로 치환한 결과를 반환한다. replace_string이 생략되거나 NULL인 경우 expr에서 정규 표현식 패턴과 일치하는 문자열이 제거된 결과가 반환된다.

start는 검색을 시작할 위치이며, 0이 아닌 양수를 입력한다. 이 값을 생략하면 기본값은 1이며, 입력된 expr 문자열의 첫 번째 문자부터 검색을 시작한다.

occurrenceexpr의 몇 번째 나타나는 pattern_expr을 치환할 것인지를 설정할 수 있다. 기본값은 0이며, 탐색되는 모든 pattern_expr을 치환함을 의미한다.

pattern_expr에는 검색 패턴을 정규 표현식으로 표현한 값이 올 수 있다. 정규 표현식에 대한 자세한 설명은 "부록 A. 정규 표현식"을 참고한다.

예제#

<질의> 입력한 문자열에서 'Guro'와 일치하는 문자열 중 2번째를 'Mapo'로 치환하라.

SELECT REGEXP_REPLACE('Daerungpost-Tower II Guro-3 Dong, Guro-gu Seoul', 'Guro', 'Mapo', 1, 2) "REGEXP_REPLACE"
  FROM DUAL;
REGEXP_REPLACE 
----------------------------------------------------------------------
Daerungpost-Tower II Guro-3 Dong, Mapo-gu Seoul 
1 row selected. 

REGEXP_SUBSTR#

구문#

REGEXP_SUBSTR (expr, pattern_expr [, start [, occurrence]])

설명#

REGEXP_SUBSTR 함수는 expr에서 pattern_expr과 일치하는 문자열을 찾아서 반환한다.

pattern_expr에는 이 함수를 이용하여 찾으려는 정규 표현식 패턴을 입력하며, 최대 1024 바이트까지 입력할 수 있다.

start는 검색을 시작할 위치이며, 0이 아닌 양수를 입력한다. 이 값을 생략할 경우 기본값은 1이며, 입력된 expr 문자열의 첫 번째 문자부터 검색을 시작한다.

occurrenceexpr에서 몇 번째 나타나는 pattern_expr을 반환할 것인지를 가리킨다. 기본값은 1이며, 처음 탐색되는 pattern_expr을 의미한다.

pattern_expr에는 검색 패턴을 정규 표현식으로 표현한 값이 올 수 있다. 정규 표현식에 대한 자세한 설명은 "부록 A. 정규 표현식"을 참고하라.

예제#

<질의> 입력한 문자열에서 'Guro'와 일치하는 문자열이 2번째 나오는 substring을 반환하라.

SELECT REGEXP_SUBSTR('Daerungpost-Tower II Guro-3 Dong, Guro-gu Seoul', 'Guro', 1, 2) "REGEXP_SUBSTR"
  FROM DUAL;
REGEXP_SUBSTR
---------------
Guro
1 row selected.

<질의> 입력한 문자열에서 띄어쓰기가 없는 3번째 문자열을 반환하라.

SELECT REGEXP_SUBSTR('Daerungpost-Tower II Guro-3 Dong, Guro-gu Seoul', '[^ ]+', 1, 3) "REGEXP_SUBSTR"
  FROM DUAL;
REGEXP_SUBSTR
---------------------------------------------------
Guro-3
1 row selected.

REPLACE2, REPLACE#

구문#

REPLACE2 (expr1 , expr2, [expr3])

설명#

이 함수는 expr1내에서 모든 expr2expr3으로 치환하여 그 결과를 반환한다. expr3이 생략되거나 NULL인 경우 expr2은 제거된다. 만약 expr2이 NULL이면 expr1 이 그대로 반환된다.

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

REPLACE는 REPLACE2와 같은 함수이다.

예제#

<질의> departments 테이블의 dname칼럼의 값에서 "team"을 "division"으로 모두 치환하라.

SELECT REPLACE2(dname, 'team', 'division')
  FROM departments;
REPLACE2(DNAME, 'team', 'division') 
------------------------------------------------
Engine Development Division
Marketing Division
Planning and Management Division
Sales Division
5 rows selected.

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

SELECT REPLACE2('abcdefghicde', 'cde', 'xx') FROM DUAL;
REPLACE2('abcdefghicde', 'cde', 'xx')  
-----------------------------------------
abxxfghixx                
1 row selected.

REPLICATE#

구문#

REPLICATE (expr, n)

설명#

이 함수는 exprn만큼 반복한 문자열을 반환한다. expr 는 문자열이고 n은 양수이어야 한다. 만약 n이 0 또는 음수이면 REPLICATE 함수는 NULL을 반환한다.

예제#

<질의> 문자열 "KSKIM"을 3회 반복한 문자열을 출력하라.

SELECT REPLICATE ('KSKIM', 3) FROM DUAL;
REPLICATE ('KSKIM', 3)
-----------------------------------
KSKIMKSKIMKSKIM
1 row selected.

RPAD#

구문#

RPAD (expr1, n [,expr2])

설명#

이 함수는 expr1의 오른쪽 끝에 expr2를 전체 길이가 n이 될 때까지 반복적으로 붙여서 그 결과를 반환한다. expr2를 명시하지 않으면, 공백 문자가 붙는다. 만약, expr1의 길이가 n 보다 길면 expr1의 왼쪽부터 길이 n만큼의 문자열을 반환한다.

n은 바이트의 개수가 아니라 문자 개수를 의미하므로 사용하는 언어(설정된 문자 집합)에 따라 문자열의 바이트 크기는 다를 수 있다.

예제#

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

SELECT TO_NUMBER(RPAD('123', 10, '0')) rpad_ex FROM DUAL;
RPAD_EX     
--------------
1230000000  
1 row selected.

RTRIM#

구문#

RTRIM (expr1 [, expr2])

설명#

expr1의 가장 오른쪽 문자부터 시작해서 expr1의 각 문자들과 expr2의 각 문자들을 비교한다. expr1의 현재 문자가 expr2에 있는 한 문자와 같으면 expr1의 문자를 삭제한다. 이 과정을 expr1의 현재 문자와 일치하는 문자가 expr2에 없을 때까지 삭제하여 그 결과를 출력한다.

expr2의 기본값은 한 개의 공백이다. 그러므로, expr2가 생략된 경우 expr1의 뒤(오른쪽)에서부터 공백이 모두 제거된다.

예제#

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

SELECT RTRIM ('RIGHTTRIMbaAbab', 'ab') rtrim_ex FROM DUAL;
RTRIM_EX         
-------------------
RIGHTTRIMbaA     
1 row selected.

<질의> 각 사원의 입사일 정보에서 년도를 제거하여 입사 일월만 출력하라.

SELECT e_lastname
     , RTRIM(RTRIM(join_date, '1234567890'), '-') join_date
  FROM employees;
E_LASTNAME            JOIN_DATE
---------------------------------------------------------------------------
.
.
.
Ghorbani              20-DEC
Momoi                 09-SEP
Fleischer             24-JAN
Wang                  29-NOV
.
.
.
20 rows selected.

SIZEOF#

구문#

SIZEOF (expr)

설명#

이 함수는 문자열의 크기 또는 거기에 할당된 크기를 반환한다. 입력 값은 CHAR, VARCHAR, 또는 숫자형 데이터 타입일 수 있다. 입력 값이 숫자형 데이터 타입이면, VARCHAR로 변환하여 거기에 할당된 크기를 되돌려 준다.

OCTET_LENGTH 함수가 입력 문자열의 실제 크기를 반환하는 것에 반해 SIZEOF 함수는 입력 문자열에 할당된 공간의 크기 또는 테이블 생성시 정의된 칼럼의 크기를 반환한다.

Note: SIZEOF 함수는 INTEGER, BIGINT, SMALLINT 데이터 타입에 대해서는 20을 반환하며, DECIMAL, FLOAT, NUMBER, NUMERIC 데이터 타입에 대해서는 47 그리고 DOUBLE, REAL 데이터 타입에 대해서는 22를 반환한다.

예제#

<질의> 테이블 dual의 칼럼 dummy에 할당된 크기를 출력하라.

SELECT SIZEOF(dummy) FROM DUAL;
SIZEOF(DUMMY)   
--------------
1           
1 row selected. 

SUBSTR, SUBSTRB, SUBSTRING#

구문#

SUBSTR (expr, start [, length])

설명#

SUBSTR 함수는 expr에서 start번째 문자부터 length 길이만큼의 문자열을 반환한다.

start가 양수이면, 이 함수는 입력 문자열의 앞에서 start번째 문자부터 시작해서 length 길이만큼의 문자열을 반환한다. start가 음수이면, 이 함수는 입력 문자열의 끝에서 start번째 문자부터 시작해서 length 길이만큼의 문자열을 반환한다. start가 0이면, 1을 지정한 것처럼 처리된다.

length 을 생략하면 문자열의 끝까지 모든 문자가 반환된다.

입력 문자열은 CHAR 또는 VARCHAR 또는 숫자 데이터 타입일 수 있다. 입력 값이 숫자 데이터 타입일 경우, 이는 VARCHAR로 변환된다. 리턴 값의 데이터 타입은 VARCHAR이다.

SUBSTR 함수가 위치와 길이를 입력 문자열의 문자 단위로 결정하는데 반해, SUBSTRB 함수는 위치와 길이를 문자가 아닌 바이트 단위로 결정한다.

SUBSTRING은 SUBSTR와 같은 함수이다.

예제#

<질의> 문자열 "SALESMAN"의 첫번째 문자부터 시작해서 길이 5만큼의 substring을 반환하라.

SELECT SUBSTR('SALESMAN', 1 ,5) substring FROM DUAL;
SUBSTRING  
-------------
SALES     
1 row selected.

<질의> 입력 문자열 "ABCDEFG"의 substring을 반환하라.

SELECT SUBSTR('ABCDEFG', -5 ,4) substring FROM DUAL;
SUBSTRING  
-------------
CDEF     
1 row selected.

<질의> 문자열 "ABCDEFG"에서 5번째 바이트 부터 2 바이트 길이 만큼의 문자를 출력하라.

SELECT SUBSTRB('ABCDEFG', 5, 2) substring_with_bytes FROM DUAL;
SUBSTRING_WITH_BYTES  
------------------------
EF       
1 row selected.

TRANSLATE#

구문#

TRANSLATE (expr1 , expr2, expr3)

설명#

TRANSLATE는 expr1의 각 문자를 체크하여 expr2 중에 있는지 확인한다. 만약 expr2에서 찾을 수 없으면, expr1의 문자는 그대로 남는다. 그러나 만약에 expr2에 같은 문자가 있다면, expr1의 문자는 expr3에서 일치하는 위치의 문자로 교체된다. 이 함수는 이런 방식으로 교체되어 expr1이 수정된 결과를 반환한다.

문자열 expr2의 문자들 개수가 expr3에 있는 문자들 개수보다 많아도 된다. 이 경우, expr2의 끝 부분의 문자들은 expr3에서 대응하는 문자가 없을 것이다. 만약 이런 문자들이 expr1에서 발견된다면, 이 문자는 제거된다. expr1에서 expr2의 모든 문자를 제거하고자 한다면, expr3에 빈 문자열을 입력하라.

expr3expr2보다 길면, expr3의 나머지 문자들은 무시된다. 같은 문자가 expr2에 여러 개 있으면, 처음 나타나는 문자가 문자가 사용된다.

예제#

<질의> 재고량이 50000개가 넘는 상품의 이름에서 "M"을 "L"로 바꾸어라.

SELECT TRANSLATE(gname, 'M', 'L')
  FROM goods
 WHERE stock > 50000;
TRANSLATE(GNAME, 'M', 'L')                
--------------------------------------------
TL-U200                                   
L-190G                                    
2 rows selected.

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

SELECT TRANSLATE('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijlkmnopqrstuvwxyz')
  FROM DUAL;
TRANSLATE('0123456789ABCDEFGHIJKLMNOPQRS 
------------------------------------------------
0123456789abcdefghijlkmnopqrstuvwxyz0123456789 
1 row selected.

<질의> 라이센스 번호에서 알파벳 문자는 제거하고 숫자만 남겨서 반환하라.

SELECT TRANSLATE('3PQR334', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789') License
  FROM DUAL;
LICENSE         
------------------
3334            
1 row selected.

TRIM#

구문#

TRIM (expr1 [, expr2])

설명#

TRIM은 expr2에 존재하지 않는 첫번째 문자로 시작하고 expr2에 존재하지 않는 마지막 문자로 끝나는 expr1의 substring을 반환한다. 이들 두 문자 사이의 expr1 일부분이 변환없이 반환된다.

즉, TRIM은 expr2에서 찾을 수 있는 모든 문자를 expr1의 처음과 끝에서 제거하여 그 결과를 반환한다.

그러므로, 이 함수는 LTRIM과 RTRIM을 같은 값의 expr2를 사용해서 함께 실행한 것과 결과가 같다.

expr2의 기본 값은 한 개의 공백 문자이다. 이는 expr2가 명시되지 않을 경우, expr1의 양쪽 끝의 모든 공백이 제거됨을 의미한다.

예제#

<질의> 문자열 "abbAaBbAbba"에서 양쪽 끝에서부터 a와 b를 제거한 문자열을 출력하라.

SELECT TRIM ('abbAaBbAbba', 'ab') trim_ex FROM DUAL;
TRIM_EX      
---------------
AaBbA        
1 row selected.

UPPER#

구문#

UPPER (char)

설명#

이 함수는 입력 문자열의 모든 문자를 대문자로 바꿔서 반환한다.

예제#

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

SELECT UPPER('Capital') uppercase FROM DUAL;
UPPERCASE  
-------------
CAPITAL  
1 row selected.

REVERSE_STR#

구문#

REVERSE_STR (expr)

설명#

이 함수는 expr의 문자 순서를 거꾸로 바꾼 결과를 반환한다.

예제#

<질의> 문자열 "KSKIM"을 거꾸로 출력하라.

SELECT REVERSE_STR ('KSKIM') FROM DUAL;
REVERSE_STR ('KSKIM')  
-------------------------
MIKSK  
1 row selected.

<질의> 문자열 '알티베이스7'를 거꾸로 출력하라. (단, 데이터베이스 문자 집합이 KO16KSC5601로 설정되어 있다.)

SELECT REVERSE_STR ('알티베이스7') FROM DUAL;
REVERSE_STR ('알티베이스7')  
-------------------------
7스이베티알
1 row selected.

STUFF#

구문#

STUFF (expr1, start, length, expr2)

설명#

이 함수는 start로 명시한 위치부터 length 길이만큼 제거하고 expr2를 그 자리에 삽입한 문자열을 반환한다.

length에 0이 입력되면, expr1에서 아무것도 삭제하지 않고 expr2를 삽입한다. 이 경우 expr2의 삽입 위치는 start가 가리키는 위치의 왼쪽이다. lengthexpr1start 위치 오른쪽 문자들의 길이보다 크면, start 의 오른쪽에 있는 문자열을 모두 지운 후 expr2를 삽입한다.

expr2expr1의 맨 뒤에 붙이려면, start를 (expr1의 길이+1)로 지정하고, length 는 0또는 양수로 지정하라.

start또는 length 의 값이 음수이거나 start가 (expr1의 길이+1) 보다 클 경우에는 에러가 발생한다.

예제#

<질의> STUFF 함수를 이용하여 "KDHONG"을 "KILDONG HONG"으로 변환하라.

SELECT STUFF ('KDHONG', 2, 1, 'ILDONG ') FROM DUAL;
STUFF ('KDHONG', 2, 1, 'ILDONG ')
--------------------------------------------------
KILDONG HONG
1 row selected.

<질의> expr2expr1 앞에 삽입하라.

SELECT STUFF ('KDHONG', 1, 0, 'ILDONG ') FROM DUAL;
STUFF ('KDHONG', 1, 0, 'ILDONG ')
--------------------------------------------------
ILDONG KDHONG
1 row selected.

<질의> expr2expr1 뒤에 삽입하라.

SELECT STUFF ('KDHONG', 7, 0, 'ILDONG ') FROM DUAL;
STUFF ('KDHONG', 7, 0, 'ILDONG ')
--------------------------------------------------
KDHONGILDONG 
1 row selected.

<질의> start의 왼쪽에 expr2가 삽입되도록 length를 0으로 입력하라.

SELECT STUFF ('KDHONG', 2, 0, 'ILDONG ') FROM DUAL;
STUFF ('KDHONG', 2, 0, 'ILDONG ')
--------------------------------------------------
KILDONG DHONG
1 row selected.

<질의> 데이터베이스 문자 집합이 KO16KSC5601로 설정된 경우 STUFF 함수를 이용해서 입력 문자열의 내용을 변경하라.

SELECT STUFF ('알티베이스0', 5, 1, '데이터베이스') FROM DUAL;
STUFF ('알티베이스0', 5, 1, '데이터베이스')
------------------------------------------------
알티베이데이터베이스0
1 row selected.