숫자 함수 - 특정 위치에서 버리는 함수(TRUNC)

 

TRUNC 함수는 지정된 자리 이하 숫자를 버리는 함수 입니다. 위치를 지정하지 않으면 소수점 이하 숫자를 버림 처리 합니다.


TRUNC
( 숫자, [버림위치] )

예제를 통헤 RTUNC 함수를 살펴 봅시다.

SELECT  TRUNC(1234.5678), 
        TRUNC(1234.5678, 0),
        TRUNC(1234.5678, 1),
        TRUNC(1234.5678, 2),
        TRUNC(1234.5678, -1),
        TRUNC(1234.5678, -2)
FROM DUAL;

 

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

숫자 함수 - 특정 위치에서 반올림 함수(ROUND)

특정 숫자를 반올림하면서 반올림 할 위치를 지정할 수 있습니다. 지정하지 않으면 소수 첫째 자리에서 반올림한 결과를 반환합니다.

ROUND( 숫자, [반올림 위치] )

 

ROUND 함수를 이용하여 다양한 위치에서 반올림 을 해봅시다.

SELECT  ROUND(1234.6578), 
        ROUND( 1234.6578, 0),
        ROUND(1234. 6578, 1),
        ROUND(1234. 6578, 2),
        ROUND(1234. 6578, -1),
        ROUND(1234. 6578, -2)
FROM DUAL;

 

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

 

 

 

 

 

특정 문자 지우기(TRIM, LTRIM, RTRIM)

특정문자를 지우고 싶을때는 TRIM, LTRIM, RTRIM 함수를 사용하시면 됩니다.

1. TRIM 함수

TRIM( [삭제 옵션], [삭제할 문자] FROM 문자열 )

삭제 옵션에는 왼쪽 글자를 지우는 LEADING, 오른쪽 글자를 지우는 TRAILING, 양쪽 글자를 지우는 BOTH 가 있이며,
생략시에는 양쪽 값이 모두 삭제됩니다.

이때, 삭제할 문자는 필수가 아니며, 삭제할 문자를 지정하지 않으면 공백을 지웁니다. 

SELECT  '[' || '   LOVE   YOU   ' || ']' AS ORIGINAL, 
        '[' || TRIM ('   LOVE   YOU   ') || ']' AS TRIM, 
        '[' || TRIM (LEADING FROM '   LOVE   YOU   ') || ']' AS TRIM_L, 
        '[' || TRIM (TRAILING FROM '   LOVE   YOU   ') || ']' AS TRIM_T, 
        '[' || TRIM (BOTH FROM '   LOVE   YOU   ') || ']' AS TRIM_B 
FROM DUAL;

이번에는 삭제할 문자열이 있는 경우를 살펴 봅시다.

SELECT  '[' || '***LOVE***YOU***' || ']' AS ORIGINAL, 
        '[' || TRIM ('*' FROM '***LOVE***YOU***') || ']' AS TRIM, 
        '[' || TRIM (LEADING '*' FROM '***LOVE***YOU***') || ']' AS TRIM_L, 
        '[' || TRIM (TRAILING '*' FROM '***LOVE***YOU***') || ']' AS TRIM_T, 
        '[' || TRIM (BOTH '*' FROM '***LOVE***YOU***') || ']' AS TRIM_B 
FROM DUAL;

 

2. LTRIM, RTRIM 함수

TRIM 함수 이외에  LTRIM, RTRIM 함수를 사용에 대한 예제도 살펴 봅시다.

LTRIM( 원본 문자열 데이터, [삭제할 문자 또는 문자열]  )
RTRIM(원본 문자열 데이터, [삭제할 문자 또는 문자열]  )

LTRIM, RTRIM 함수는 각각 왼쪽, 오른쪽의 지정 문자 또는 문자열을 삭제할 때 사용합니다. 삭제할 문자 또는 문자열을 지정하지 않으면 공백 문자를 삭제합니다.

SELECT  '[' || '   LOVE   YOU   ' || ']' AS ORIGINAL, 
        '[' || TRIM ('   LOVE   YOU   ') || ']' AS TRIM, 
        '[' || LTRIM ('   LOVE   YOU   ') || ']' AS LTRIM, 
        '[' || RTRIM ('   LOVE   YOU   ') || ']' AS RTRIM
FROM DUAL;

공백이 아닌 문자열이 있는 경우를 예제로 살펴 봅시다.

SELECT  '[' || '*_*LOVE*_*YOU*_*' || ']' AS ORIGINAL, 
        '[' || TRIM ('*_*LOVE*_*YOU*_*') || ']' AS TRIM, 
        '[' || LTRIM ('*_*LOVE*_*YOU*_*', '*_') || ']' AS LTRIM, 
        '[' || RTRIM ('*_*LOVE*_*YOU*_*', '*_') || ']' AS RTRIM
FROM DUAL;

 

실무에서는 데이터를 저장할때 저장할 데이터 앞이나, 끝에 의미 없는 공백을 제거하고 저장 한다거나, Login시 사용자의 실수로 입력된 공백이 있을 수 있어 이를 제거하고 비교할때 사용 됩니다.

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

[Oracle] 숫자 함수 - 나머지를 구하는 함수(MOD)

MOD 함수는 나눗셈을 수행하고 남은 나머지를 구하는 함수 입니다.

MOD ( 나머지를 구할 숫자, 나눌 숫자 )

 

예제를 통해 MOD 함수의 사용을 살펴 봅시다.

SELECT  MOD(100,2),
        MOD(99,2),
        MOD(3.14, 3),
        MOD(-99,2),
        MOD(-3.14,3)
FROM DUAL;

 

두 문자열 데이터 합치기(CONCAT)

 

두 문자열 데이터를 하나로 연결하고 표현하고 싶을때 CONCAT 함수를 사용하시면 됩니다. ENAME과 JOB을 합쳐서 출력해 봅시다. 이때, ENAME과 JOB의 구분이 잘 될수 있도록 중간에 ' - ' 를 넣어 봅시다.

SELECT ENAME, JOB, 
    CONCAT(ENAME, JOB),
    CONCAT(ENAME, CONCAT(' - ', JOB))
FROM EMP;

 

[참고] CONCAT 함수와 비슷한  '||' 연산자

'||' 연산자는 문자열 데이터를 연결하는 연산자로, CONCAT 함수와 비슷하게 사용할 수 있습니다.

위와 같은 결과 값을 갖도록 '||' 연산자를 이용한 쿼리를 만들어 보면 다음과 같습니다.

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

공백을 특정 문자로 채우기(LPAD, RPAD)

 

문자열에서 문자열 이외에 공간을 특정 문자로 채우고자 하면 LPAD, RPAD 함수를 사용하시면 됩니다.

LPAD( 문자열, 찾는 문자, 데이터의 자리수, [공백에 채울 문자] )
RPAD( 문자열, 찾는 문자, 데이터의 자리수, [공백에 채울 문자] )

예제를 통해 직접 알아 봅시다.

 

SELECT 'ORACLE', 
    LPAD('ORACLE', 10, '*'), RPAD('ORACLE', 10, '*'),
    LPAD('ORACLE', 10), RPAD('ORACLE', 10)
FROM DUAL;

 

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

 

 

특정문자를 다른 문자로 바꾸기(REPLACE)

 

문자열에서 특정 문자만 다른 문자로 바꾸고자 하면 REPLACE 함수를 사용하시면 됩니다.

REPLACE( 문자열, 찾는 문자, [대체할 문자])

이때, 대체할 문자 를 생략하게 되면 해당 문자를 문자열에서 삭제합니다.

직원의 이름에서 알파벳 대문자 'A'를 소문자로 바꾸어 봅시다. 또, 아예 직원 이름에서 대문자 'A'를 삭제해 봅시다.

SELECT ENAME, REPLACE(ENAME,'A','a'), REPLACE(ENAME,'A')
FROM EMP;

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

특정 문자의 위치 찾기(INSTR)

 

문자열 데이터 안에서 특정 문자의 위치를 찾고자 할때는 INSTR 함수를 사용하시면 됩니다.

INSTR( 대상 문자열 데이터, 위치를 찾으려는 부분 문자, [위치를 찾기 시작할 대상 문자열의 데이터 위치(기본값은 1)],
[시작위치에서 찾으려는 문자가 몇번째인지 지정(기본값은 1)])

INSTR함수의 사용을 예제로 살펴 봅시다. 

SELECT ENAME, INSTR(ENAME, 'L'), INSTR(ENAME, 'L', 4), INSTR(ENAME, 'L', 2, 2)
FROM EMP;
  • ENAME, INSTR(ENAME, 'L') : 문자열의 처음부터 알파벳 'L'을 찾아, 처음으로 'L' 이 나오는 위치를 구합니다.
  • INSTR(ENAME, 'L', 4) : 문자열의 네 번째부터 알파벳 'L'을 찾아, 처음으로 'L' 이 나오는 위치를 구합니다.
  • INSTR(ENAME, 'L', 2, 2) : : 문자열의 두 번째부터 알파벳 'L'을 찾아, 두 번째로 'L' 이 나오는 위치를 구합니다.

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

 

문자열 일부를 추출하는 함수(SUBSTR)

 

단어에서 시작하는 첫 알파벳만 알고 싶거SUBSTR나, 전화번호에서 마지막 네자리 숫자만 알고 싶을때는 문자열 일부를 추출하는 함수인 SUBSTR를 사용합니다.

함수 설명
SUBSTR(문자열 데이터, 시작위치, [추출길이] ) - 문자열 데이터의 시작 위치부터 추출 길이 만큼의 문자열을 출력합니다.
- 시작위치가 음수인경우 문자열의 끝에서 부터 역산하여 위치를 찾아 해당 위치부터 추출 길이 만큼의 문자열을 출력합니다.
- 추출길이가 생략된 경우 문자열의 시작위치 부터 끝까지를 출력합니다.
이때, 시작위치가 음수이면 문자열의 끝에서 부터 역산한 위치부터 끝까지의 문자열을 출력합니다.  

 

 

SUBSTR 함수를 이용하여 다양하게 출력해 봅시다.

SELECT JOB,
    SUBSTR(JOB, 1, 2), SUBSTR(JOB, 3, 2), SUBSTR(JOB, 5), SUBSTR(JOB, -3, 2), SUBSTR(JOB, -5)
FROM EMP;
  • SUBSTR(JOB, 1, 2) : 문자열의 처음부터 2글자를 출력합니다.
  • SUBSTR(JOB, 3, 2) : 문자열의 처음에서 세 번째 글자부터 두 글자를 출력합니다.
  • SUBSTR(JOB, 5) : 문자열의 처음에서 다섯번째 글자부터 끝까지를 출력합니다.
  • SUBSTR(JOB, -3, 2) : 문자열의 끝에서 세번째 글자부터 두 글자를 출력합니다.
  • SUBSTR(JOB, -5) : 문자열의 끝에서 다섯번째 글자부터 끝까지를 출력합니다.

 

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

문자열 대소문자 변환 함수(UPPER, LOWER, INTCAP)

 

문자열 데이터를 가공하거나 문자열 데이터로 특정한 결과를 얻고자 할때 사용하는 함수입니다.

함수 설명
UPPER(문자열) 괄호 안 문자열 데이터를 모두 대문자로 변환하여 반환 합니다.
LOWER (문자열) 괄호 안 문자열 데이터를 모두 소문자로 변환하여 반환 합니다.
INITCAP(문자열) 괄호 안 문자열 데이터 중 첫번째 글자는 대문자로, 나머지 문자는 소문자로 변환하여 반환합니다. 

 

문자 함수에 대한 예제를 살펴 봅시다. 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

SELECT ENAME, UPPER(ENAME), LOWER(ENAME), INITCAP(ENAME)
FROM EMP;

 

해당 함수들은 문서의 비교나 특정 문자열을 찾는 경우, 해당 문자가 대문자로 쓰여 있던, 소문자로 쓰였있던, 섞어서 쓰여 있던 상관없이 검색이 가능합니다. 즉 내가 'Oracle' 이라는 단어를 검색하고 싶은데, 문서에는 "oracle", "ORACLE", "OrAcLe"와 같은 형식으로 쓰여 있는 경우 일반검색으로는 찾을 수 없지만, 문자를 모두 대문자나, 소문자로 치환하면 비교하여 찾는 것이 가능합니다.

 

자료 검색의 예로 이름이 'TH'로 끝나는 직원을 찾는 쿼리를 만들어 봅시다. (LIKE 연산자에 대해 궁금하신 부분은 'SQL 연산자 - LIKE 연산자' 부분을 참고하시면 됩니다.)

 

SELECT *
FROM EMP
WHERE UPPER(ENAME) LIKE UPPER('%th');

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

 

'DataBase' 카테고리의 다른 글

[Book] 오라클로 배우는 SQL 입문  (4) 2025.07.31
[Oracle] SCOTT 계정 삭제와 데이터 초기화  (0) 2025.07.31
데이터 변경 시 유의 사항  (0) 2025.07.28
[ORACLE] ORACLE 함수  (1) 2025.07.28
SQL 연산자 - 집합 연산자  (0) 2025.07.26

+ Recent posts