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을 사용하여야 한다.