1. 문자열 함수
2. 숫자 함수
3. 날짜 함수
4. 변환 함수
5. NULL 관련 함수
6. 집계 함수
1. 문자열 함수
1) SUBSTR
SELECT SUBSTR('HELLO', 1, 3) FROM DUAL;
=> 1번째부터 3번째까지 출력
=> 결과 : HEL
SELECT SUBSTR('HELLO', 3) FROM DUAL;
=> 3번째부터 출력
=> 결과 : LLO
2) SUBSTRB
SELECT SUBSTRB('HELLO', 3) FROM DUAL;
=> 3번째 byte부터 출력됨
한글은 1글자가 3byte이므로 영어랑 다르게 출력됨
=> 결과 : LLO
4) TRIM (TRIM, LTRIM, RTRIM)
=> 빈 공백을 없애는 함수
5) LOWER
=> 소문자로 변겅
6) UPPER
=> 대문자로 변경
7) REPLACE, TRANSLATE
=> 문자 바꿔주는 함수
8) PAD
=> 출력하고자 하는 문자열이 있을 때 너비를 고정하는 함수
9) INITCAP
=> 첫 글자를 대문자로 바꿔주는 함수
10) INSTR
=> 문자열의 위치를 알려주는 함수
11) LENGTH
=> 문자열 길이를 얻는 함수
SUBSTR
<예제>
모든 학생의 이름과 출생 월만 조회하기
(1) MEMBER 테이블의 NAME과 BIRTHDAY 값을 모두 출력
SELECT NAME BIRTHDAY FROM MEMBER;
(2) SUBSTR 사용해서 값 출력
SELECT NAME, SUBSTR(BIRTHDAY, 6, 2) FROM MEMBER;
3) SUBSTR 이용해서 출력한 값의 컬럼명 별칭 사용
SELECT NAME, SUBSTR(BIRTHDAY, 6, 2) MONTH FROM MEMBER;
<예제>
회원 중에서 전화번호가 011으로 시작하는 회원의 모든 정보를 출력하기
1) SUBSTR 함수 이용
SELECT * FROM MEMBER WHERE SUBSTR(PHONE, 1, 3) = '011';
2) LIKE 이용
SELECT * FROM MEMBER WHERE PHONE LIKE '011%';
<예제>
회원 중에서 생년 월이 7, 8, 9월인 회원의 모든 정보를 출력하기
=> MEMBER의 모든 회원 출력
(방법_1)
SELECT * FROM MEMBER WHERE SUBSTR(BIRTHDAY, 6, 2) = '07'
OR SUBSTR(BIRTHDAY, 6, 2) = '08'
OR SUBSTR(BIRTHDAY, 6, 2) = '09';
(방법_2)
SELECT * FROM MEMBER SUBSTR(BIRTHDAY, 6, 2) IN ('07', '08', '09');
=> 생일이 07, 08, 09이 아닌 회원을 출력하기
SELECT * FROM MEMBER WHERE SUBSTR(BIRTHDAY, 6, 2) NOT IN('07', '08', '09');
<예제>
전화번호를 등록하기 않은 회원 중에서 생년 월이 7, 8, 9월인 회원의 모든 정보를 출력하시오
SELECT * FROM MEMBER WHERE SUBSTR(BIRTHDAY, 6, 2) IN ('07', '08', '09') AND PHONE IS NULL
CONCAT
문자열 덧셈 함수
(방법_1)
SELECT CONCAT('홍', '길동') FROM DUAL;
(방법_2)
SELECT '3' || '4' FROM DUAL;
SELECT '홍' || '길동' FROM DUAL;
TRIM
빈 공백을 없애는 함수
1) LTRIM
SELECT LTRIM(' HELLO ') FROM DUAL;
2) RTRIM
SELECT RTRIM(' HELLO ') FROM DUAL;
3) TRIM
SELECT TRIM(' HELLO ') FROM DUAL
LOWER, UPPER
SELECT LOWER('tIRgER') FROM DUAL;
1) LOWER
=> 소문자로 변경
2) UPPER
=> 대문자로 변경
<예제>
회원의 아이디가 'tiger'인 회원을 조회하기 (단, 대소문자를 가리지 않음)
SELECT * FROM MEMBER WHERE UPPER(ID) = 'TIGER';
SELECT * FROM MEMBER WHERE LOWER (ID) = 'tiger';
* WHERE문이
'TIGER' (대문자)이면 UPPER을 사용하고
'tiger' (소문자)이면 LOWER을 사용한다
REPLACE, TRANSLATE
=> 문자 바꿔주는 함수
1) REPLACE
SELECT REPLACE('WHERE WE ARE', 'WE', 'YOU') REPLACE FROM DUAL;
=> WE를 YOU로 바꿔준다.
2) TRANSLATE
SELECT TRANSLATE('WHERE WE ARE', 'WE', 'YOU') TRANSLATE FROM DUAL;
=> W는 Y로 변경
E는 O로 변경
U는 의미 없음
<예제>
회원의 이름과 메일을 조회하기 (단, 메일은 빈칸 없이 조회하기)
SELECT NAME, REPLACE(EMAIL, ' ', '') FROM MEMBER;
=> ' '(공백)을 ''(공백 없음)으로 REPLACE(바꾸기)
PAD
SELECT LPAD('HELLLO', 5) FROM DUAL;
-- 빈공간 없음
SELECT LPAD('HELLO', 10, '0') FORM DUAL;
-- 나머지 5자를 0으로 채워라
-- 결과 : 00000HELLO
SELECT RPAD('HELLO', 10, '0') FROM DUAL;
-- 결과 : HELLO 00000
<예제>
회원의 이름을 조회하기 (단, 이름의 길이가 3자가 안되는 경우는 이름 오른쪽을 밑줄('_')로 채우기
SELECT RPAD(NAME, 6, '_') FROM MEMBER;
=> PAD는 한글과 영어를 사용할 때 결과다 다르므로 조심해야 한다.
INITCAP
=> 첫 글자를 대문자로 바꿔주는 함수
SELECT INITCAP('the') FROM DUAL;
-- 결과 : The
SELECT INITCAP('the most important') FROM DUAL;
-- 결과 : The Most Important
INSTR
=> 문자열이 존재하는지 알려주는 함수
SELECT INSTR('ALL WE NEED TO IS JUST TO', 'TO') FROM DUAL;
-- 결과 : 13
SELECT INSTR('ALL WE NEED TO IS JUST TO', 'TO', 15) FROM DUAL;
-- 결과 : 24
-- 15번째 이후에 있는 TO의 위치
SELECT INSTR('ALL WE NEED TO IS JUST TO', 'TO', 1, 2) FROM DUAL;
-- 결과 : 24
-- 1번째 찾은 문자부터 시작해서 2번째 찾은 문자의 위치
-- 해당 문자열의 위치를 셀 필요가 없음
<예제>
회원의 전화번호에서 두 번째 대시(-) 문자가 존재하는 위치를 출력하기
SELECT INSTR(PHONE, '-', 1, 2) FROM MEMBER;
<예제>
회원의 전화번호에서 첫 번째 대시(-) 문자와 두 번째 대시(-) 문자 사이의 간격
SELECT INSTR(PHONE, '-', 1, 2) - INSTR(PHONE, 1, 1)-1 FROM MEMBER;
<예제>
회원의 전화번호에서 첫 번째와 두 번째 사이의 국번을 출력하기
SELECT SUBSTR(PHONE, 5, INSTR(PHONE, '-', 2, 1) - INSTR('-', 1, 1)-1) FROM MEMBER;
LENGTH
=> 문자열 길이를 얻는 함수
SELECT LENGTH(NAME) FROM MEMBER;
--MEMBER테이블의 NAME의 길이를 구함
SELECT MEMBER.NAME, LENGTH(NAME) FORM MEMBER;
-- NAME과 NAME의 길이를 구함
<예제>
모든 회원의 핸드폰 번호와 번호의 문자열 길이를 조회하기
SELECT PHONE, LENGTH(PHONE) FROM MEMBER;
<예제>
회원의 전화번호 컬럼에 포함된 문자 '-'를 없앤 전화번호의 길이를 출력하기
SELECT LENGTH(REPLACE(PHONE, ' ', '')) FROM MEMBER;