티스토리 뷰

SQL

[Oracle SQL] 문자 함수

Alledy 2019. 5. 16. 11:38

SQL 문자 함수

ORACLE SQL 기준

  • UPPER, LOWER, INITCAP(첫글자만 대문자)

    SELECT ENAME, UPPER(ENAME), LOWER(ENAME), INITCAP(ENAME) FROM EMP;
    
    --upper로 문자열 비교
    SELECT * FROM EMP WHERE UPPER(ENAME) = UPPER('scott');
    
  • LENGTH(길이)

    SELECT ENAME, LENGTH(ENAME) FROM EMP; 
    SELECT ENAME, LENGTH(ENAME) FROM EMP WHERE LENGTH(ENAME) >= 5;  
    
  • SUBSTR

    --두번째 param은 시작 글자의 위치, 세번째 param은 리턴하고자 하는 글자의 개수
    SELECT JOB, SUBSTR(JOB, 3, 2) FROM EMP; 
    

    해당 열의 문자열 3번째 문자부터 2개를 잘라서 리턴하는 명령(인덱스처럼 0처럼 시작하지 않으니 혼동 주의)

    마지막 param은 생략가능하며 이 경우 문자열 끝까지 리턴

    SELECT JOB, SUBSTR(JOB, -LENGTH(JOB)),
    		    SUBSTR(JOB, -LENGTH(JOB), 2) FROM EMP; 
    

    -값이 올수도 있는데, 이는 문자열의 끝문자부터 -1로 시작한다. 만약 5글자인 문자열의 경우 가장 첫번째 문자가 -5번째, 가장 마지막 문자가 -1번째에 해당된다. 그러므로 -LENGTH(JOB)은 그 글자의 가장 첫번째 문자를 가리킨다.

  • INSTR

    SELECT INSTR('HELLO', 'L', 2, 2) AS INSTR_1 FROM EMP; 
    

    첫번째 param은 검색하고자 하는 문자열

    두번째 param은 찾고자하는 특정 문자

    세번째 param은 찾기 시작할 글자의 위치. 생략 가능(생략 시 첫번째 문자부터 탐색)

    네번째 param은 찾고자 하는 특정 문자가 몇번째 인지 지정(예시에서는 2번째 L을 찾으라는 의미)

    --ENAME열에서 S가 존재하는 행 구하기(LIKE써도 됨)
    SELECT * FROM EMP WHERE INSTR(ENAME, 'S') > 0; 
    
  • REPLACE

    SELECT '010-1234-5678' AS REPLACE_BEFORE, REPLACE('010-1234-5678', '-', ' ') FROM DUAL;
    
  • LPAD, RPAD

    SELECT 
    	RPAD('971225-', 14, '*') AS RPAD_JMNO 
    	FROM DUAL;
    

    두번째 param 총 데이터의 길이

    세번째 param 공백을 대체하고자 하는 문자

    RPAD는 공백 대체 문자가 오른쪽에 온다는 의미, LPAD는 반대이다.

  • CONCAT

    SELECT CONCAT(EMPNO, CONCAT(' , ', ENAME)) FROM EMP; 
    SELECT EMPNO || ' , ' || ENAME FROM EMP;
    

    열 두개를 하나로 합쳐주는 함수. ||를 사용하여도 된다.

  • TRIM

    --삭제할 문자 없을 때, return [ORACLE]
    SELECT '[' || TRIM('  ORACLE  ') || ']' AS TRIM FROM DUAL; 
    
    --왼쪽에 있는 글자 지우기, return [ORACLE  ]
    SELECT '[' || TRIM(LEADING FROM '  ORACLE  ') || ']' AS TRIM FROM DUAL;
    
    --오른쪽에 있는 글자 지우기, return [  ORACLE]
    SELECT '[' || TRIM(TRAILING FROM '  ORACLE  ') || ']' AS TRIM FROM DUAL;
    
    --삭제할 문자가 있을 때, return [ _ ORACLE_ ] 
    SELECT '[' || TRIM(BOTH '_' FROM ' _ORACLE_ _') || ']' AS TRIM FROM DUAL;
    
    --삭제할 문자가 있을 때, return [ORACLE_ ] 
    SELECT '[' || TRIM(BOTH '_' FROM '__ORACLE_ _') || ']' AS TRIM FROM DUAL;
    
    --삭제할 문자가 여러개 있을 때, return [ORACLE_ _]
    SELECT '[' || LTRIM('<__ORACLE_ _', '<_') || ']' AS TRIM FROM DUAL;
    

    삭제할 문자가 있을 때에 TRIM은 문자열의 양끝에 바로 있는 문자부터만 인식할 수 있는 듯하다. 만약 공백으로 띄워져 있다면 인식하지 못한다. 반면 공백없이 이어져 있다면 인식하여 해당 문자를 다 지워버린다.

    찾고자 하는 문자열이 여러개일 때는 LTRIM, RTRIM을 사용하여야 한다.

'SQL' 카테고리의 다른 글

[Oracle SQL] 다중행 함수, 그룹화 group by, having  (0) 2019.05.17
[Oracle SQL] DECODE, CASE  (0) 2019.05.16
[Oracle SQL] 숫자함수, 날짜함수  (0) 2019.05.16
SQL 기본  (0) 2019.05.15
SQL Command(+PostgreSQL)  (0) 2019.05.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함