<함수>
문자, 숫자, 날짜 값 등을 조작, 각 데이터 타입끼리 변환(단일 행 함수)
하나의 테이블에 있는 하나의 행을 처리
다중행 함수는 한 열의 여러 값을 처리, 하나의 값으로 나타냄
<단일 행 함수>
-
문자형 함수
-
대 소문자 함수
-
LOWER: 문자열을 소문자로 변환
-
UPPER: 문자열을 대문자로 변환
-
INITCAP: 첫문자만 대문자, 나머지는 소문자
ex) SQL Course-> Sql Course
1
2
|
SELECT 1+1
FROM DUAL; --DUAL테이블은 연습용 테이블
|
cs |
1
2
|
SELECT LOWER ('SQL COURSE'), UPPER ('sql course'),
INITCAP ('SQL COURSE') FROM DUAL;
|
cs |
-
문자 함수를 WHERE절에 사용
-
employees 테이블에서 first_name이 PATRICK인 직원의 employee_id, first_name을 조회
1
2
3
|
SELECT employee_id, first_name
FROM employees
WHERE UPPER (first_name) = 'PATRICK';
|
cs |
-
문자 조작 함수
-
CONCAT: 두 개의 문자열을 연결.
ex) CONCAT('Hello', 'World') -> HelloWorld
employees 테이블에서 first_name, last_name과 둘을 연결한 풀네임이란 별칭으로 조회
1
2
|
SELECT first_name, last_name, CONCAT (first_name, last_name)
AS 풀네임 FROM employees;
|
cs |
-
SUBSTR: 문자열 내에서 지정된 위치의 문자열을 반환
-
SUBSRT (열이름, m, n): m은 시작문자, n은 잘라낼 길이
ex) SUBSTR('HelloWorld', 2,5) -> 두번째부터 5개를 잘라라. ->elloW
-
employees테이블에서 employee_id, first_name을 조회하고 first_name의 문자를 잘라서 조회
1
2
3
4
5
6
7
|
SELECT employee_id,
first_name,
SUBSTR (first_name, 1, 3), --첫번째부터 3개의 문자를 잘라낸다.
SUBSTR (first_name, 2, 4), --두번째부터 4개의 문자를 잘라낸다.
SUBSTR (first_name, 2, 3), --두번째부터 3개의 문자를 잘라낸다.
SUBSTR (first_name, -3) --음수: 끝에서부터 카운트.
마지막 3개의 문자를 잘라낸다. FROM employees;
|
cs |
-
LENGTH: 문자열의 길이를 반환. LENGTH('HelloWorld')->10
-
employees테이블에서 first_name과 first_name의 문자열의 길이를 조회
1
2
|
SELECT first_name, LENGTH (first_name)
FROM employees;
|
cs |
-
INSTR: 지정된 문자의 위치를 리턴.
-
INSTR(문자열, 검색문자, [시작위치, [횟수]])
INSTR (문자열, 찾을 문자 M,N)
M은 검사 시작 위치
N은 찾을 횟수
디폴트 값은 M,N 각각 1
ex) INSTR('HelloWorld', 'O')->5
-
employees 테이블에서 first_name이 'Nanette'인 직원의 이름의 e를 검색하여 조회
1
2
3
4
5
6
|
SELECT first_name,
INSTR (first_name, 'e', 2), --두번째 부터 e를 검색
INSTR (first_name, 'e', 5), --다섯번째 부터 e를 검색
INSTR (first_name, 'e', 1, 2)
--첫번째부터 찾는데 2번째 나오는 e의 자릿수 FROM employees
WHERE first_name = 'Nanette';
|
cs |
-
TRIM: 접두어나 접미어를 잘라냄
ex) TRIM('H' FROM 'HelloWorld') -> elloWorld
-
LPAD, RPAD: 지정된 문자열의 길이 만큼 빈 부분에 문자를 채움.
ex) LPAD('World', 10, '*') ->****World
-
employees테이블에서 employee_id, first_name, salary를 조회하되 salary에서 10자리 중 빈 곳은 왼쪽정렬로 #을 채우고, 오른쪽 정렬로 *을 채워서 출력
1
2
3
|
SELECT employee_id, first_name, salary,
LPAD (salary, 10, '#'), RPAD (salary, 10, '*')
FROM employees;
|
cs |
-
문자치환 함수
-
TRANSLATE: 문자 단위 치환된 값을 리턴
-
REPLACE: 문자열 단위 치환된 값을 리턴
ex) REPLACE('hello', 'el', '*')->
-
employees테이블에서 job id에 ACCOUNT가 포함된 자료의 job_id의 ACCOUNT를 ACCNT로 치환하여 조회
1
2
3
|
SELECT job_id, REPLACE (job_id, 'ACCOUNT', 'ACCNT')
FROM employees
WHERE job_id LIKE '%ACCOUNT%';
|
cs |
<문자형 함수 예제>
-
공백을 이용하여 성과 이름을 따로 출력
1
2
3
4
|
SELECT
'홍 길동' 성명,
SUBSTR('홍 길동', 1, INSTR('홍 길동', ' ')-1) 성
FROM DUAL;
|
cs |
1
2
3
4
|
SELECT
'제갈 길동' 성명,
SUBSTR('제갈 길동', 1, INSTR('제갈 길동', ' ')-1) 성
FROM DUAL;
|
cs |
1
2
3
4
5
|
SELECT
'제갈 길동' 성명,
SUBSTR('제갈 길동', 1, INSTR('제갈 길동', ' ')-1) 성,
SUBSTR('제갈 길동', INSTR('제갈 길동', ' ')+1) 이름
--이름은 빈칸 자릿수보다 한자리 많음 FROM DUAL;
|
cs |
-
employees테이블에서 job_id의 4번째부터 3글자가 REP인 직원의 last_name과 job_id를 조회하되, job_id 앞에 '직업명이'란 글자를 붙여서 직업명이란 열로 출력
1
2
3
|
SELECT last_name, CONCAT('직업명이 ', job_id) AS 직업명
FROM employees
WHERE SUBSTRB(job_id, 4, 3)='REP';
|
cs |
-
employees테이블에서 first_name과 last_name를 붙여서 전체이름 열로 조회, last_name의 길이, last_name의 'a'가 몇번째 인지 출력
1
2
3
4
5
6
|
SELECT employee_id,
CONCAT (first_name, last_name) 전체이름,
last_name,
LENGTH (last_name) 길이,
INSTR (last_name, 'a') "'a'가 몇번째?"
FROM employees;
|
cs |
-
employees테이블에서 last_name을 소문자와 대문자로 각각 출력하고, email의 첫번째 문자는 대문자로 출력
1
2
3
4
5
|
SELECT last_name, LOWER(last_name) "LOWER적용",
UPPER(last_name) "UPPER적용",
email "이메일",
INITCAP (email) "INITCAP적용"
FROM employees;
|
cs |
-
employees테이블에서 job_id 데이터 값의 첫째 자리부터 시작해서 두 개의 문자를 출력
1
2
|
SELECT job_id, SUBSTR(job_id,1,2) "앞의2개"
FROM employees;
|
cs |