단일함수
SELECT
WHERE
ORDER BY
절에서 사용ex) 문자처리함수, 숫자처리함수 ,날짜처리함수, 형변환함수, 선택함수
그룹 함수
GROUP BY
HAVING
절에서 사용ex) SUM, AVG, COUNT, MAX, MIN
문자열 함수
오늘은 문자처리 함수에 대해서 알아보자!
✅ LENGTH
// 이메일이 16글자 이상인 사원을 조회하기
SELECT EMP_NAME, EMAIL, LENGTH(EMAIL) FROM EMPLOYEE WHERE LENGTH(EMAIL) >= 16;
// LENGTHB : 차지하는 (B)YTE를 출력
// EXPRESS버전에서 한글을 3BYTE로 저장함. ENTERPRISE버전에서는 2BYTE
SELECT LENGTHB('ABCD'), LENGTHB('월요일') FROM EMPLOYEE; // 월요일은 3BY * 3 = 9BYTE로 나옴
✅ INSTR
SELECT EMP_NAME, EMAIL FROM EMPLOYEE WHERE INSTR(EMAIL,'j')>0; // EMAIL 주소에 j가 포함되어있는 사원 찾기
SELECT INSTR('GD아카데미 GD게임즈 GD음악사 GD화이팅','GD',3), //3은 시작위치임( 8출력됨)
INSTR('GD아카데미 GD게임즈 GD음악사 GD화이팅','GD',-1), // -1은 역순방향으로 찾음 (20출력됨)
INSTR('GD아카데미 GD게임즈 GD음악사 GD화이팅','GD',1,3) // 1번째에서 시작하는데,3번에 GD있는 값 찾기 (14출력됨)
SELECT EMP_NAME,EMAIL,INSTR(EMAIL,'@') FROM EMPLOYEE; // 사원테이블에서 @의 위치를 찾기
✅ LPAD / RPAD
// 한글은 2BYTE씩 계산됨 ex) 유병승(3글자지만 2BYTE씩 계산하므로) 총 6바이트
SELECT LPAD('유병승',10,'*'), //****유병승
RPAD('유병승',10,'@'), //유병승@@@@
LPAD('유병승',10) // // 유병승
FROM DUAL;
✅ LTRIM/ RTRIM
SELECT ' 병승',LTRIM(' 병승'), // 문자열 기준으로 왼쪽 공백값들 다 제거
RTRIM(' 병승 '), // 문자열 기준으로 오른쪽 공백값들 다 제거
FROM DUAL;
SELECT '병승2222', RTRIM('병승2222','2'), // 오른쪽에 2로 시작하는 부분 다 제거
RTRIM('병승22122','2'), // 2아닌 다른 숫자로 막히는 부분까지만 제거 -> 병승221 출력됨
RTRIM('병승22122','12') // '12' -> (1또는 2) 다 삭제 -> 병승 출력
FROM DUAL;
✅ TRIM
// TRIM('문자열'||컬럼)
// TRIM(LEADING||TRALLING||BOTH '제거할문자' FROM 문자열||컬럼명)
'ZZZZZZ마징가ZZZZZZ', TRIM('Z' FROM 'ZZZZZZ마징가ZZZZZZ'), // 양쪽에 있는 Z 지워줌 -> 마징가
TRIM(LEADING 'Z' FROM 'ZZZZZ마징가ZZZZZZ'), // 문자열 왼쪽 부분 Z다 삭제 -> 마징가ZZZZZZ
TRIM(TRAILING 'Z' FROM 'ZZZZZ마징가ZZZZZZ'), // 문자열 오른쪽 부분 Z다 삭제 -> ZZZZZZ마징가
TRIM(BOTH 'Z' FROM 'ZZZZZ마징가ZZZZZZ') // 문자열 양쪽 부분 Z다 삭제 -> 마징가
FROM EMPLOYEE;
✅ SUBSTR
SELECT SUBSTR('SHOWMETHEMONEY',5), // 5번째부터 끝까지 잘라내서 보여줌 (METHEMONEY)출력
SUBSTR('SHOWMETHEMONEY',5,2), // 5번째부터 잘라서 보여주는데 2글자만 보여줌 (ME) 출력
SUBSTR('SHOWMETHEMONEY',INSTR('SHOWMETHEMONEY','MONEY')), // 10번째부터 끝까지 출력 (MONEY)
SUBSTR('SHOWMETHEMONEY',-5,2) // (-)는 역순의 의미로 역순부터 5번째인 M부터 2개 글자 출력 (MO)출력
FROM DUAL;
✅ UPPER, LOWER, INITCAP
SELECT UPPER('welcome TO OrACLE worLd'), // 모두 대문자로
LOWER('welcome TO OrACLE worLd'), // 모두 소문자로
INITCAP('welcome TO OrACLE worLd') // 첫글자만 대문자
FROM DUAL;
✅ CONCAT
SELECT EMP_NAME||EMAIL, CONCAT(EMP_NAME, EMAIL) // 이름과 이메일이 합쳐져셔 출력됨
FROM EMPLOYEE;
✅ REPLACE
SELECT EMAIL, REPLACE(EMAIL,'BS','GD') -- 이메일의 BS문자를 GD로 바꿔줌
FROM EMPLOYEE;
✅ TRANSLATE
// -- 두번째와 세번째 인자가 매칭기준이며 첫번째 인자는 변경대상이다
SELECT TRANSLATE('010-3644-6259','0123456789','영일이삼사오육칠팔구')
FROM DUAL; // 영일영-삼육사사-육이오구