오늘은 지난 시간에 배웠던 문자함수를 활용해 보는 시간입니다! 오늘 학습에 앞서 지난주에 배웠던 문자 함수를 잠시 보고 넘어가 보겠습니다.
[문자 함수]
1. 대소문자 변환 함수
- UPPER(칼럼명) : 소문자를 대문자로 변환
- LOWER(칼럼명) : 대문자를 소문자로 변환
- INTCAP(칼럼명) : 첫 글자를 대문자로 변환 (띄어쓰기 사용 시 새로 인식)
2. 특정 문자 추출
- SUBSTR(칼럼명, 시작 자리수, 출력 문자 수) : 문자열에서 특정 자리 수의 문자를 추출
3. 문자열 길이 확인
- LENGTH(칼럼명) : 문자열 길이를 추출
4. 문자의 위치 확인
- INSTR(칼럼명, '찾을 문자열') : 문자열의 특정 철자의 첫번째 위치 확인
5. 문자열 변경하기
- REPLACE(칼럼명, '찾을 문자', '바꿀 문자') : 특정 문자열을 열에서 찾아 다른 문자로 변경
6. 문자열 지우기
- LRPAD(칼럼명, 자리수 지정, '채울 문자') : 특정 문자를 N개 만큼 앞쪽에서 채워서 출력
- RRPAD(칼럼명, 자리수 지정, '채울 문자') : 특정 문자를 N개만큼 뒤쪽에서 채워서 출력
앞 시간의 내용이 복습이 되었다면, 위의 문자 함수를 이용한 실습을 진행해 보도록 하겠습니다.
1. 대소문자 함수들이 어떻게 쓰이는가?
// employees 테이블에서 first_name에서 첫글자가 대문자 E로 시작하는 결과 (소문자 e는 다른 결과 출력)
SELECT *
FROM employees
WHERE first_name LIKE '%E%';
>> 대소문자 구분없이 출력하고 싶을 경우에는?
SELECT *
FROM employees
WHERE upper(first_name) LIKE '%E%';
//employees 테이블에서 이름의 소문자 a의 위치가 1, 5, 6, 7번째인 사람들을 알고 싶다면?
SELECT first_name||' '||last_name as NAME, instr(first_name||' '||last_name, 'a') as 소문자a위치
FROM employees
WHERE instr(first_name||' '||last_name, 'a') in (1, 5, 6, 7);
>> 위의 내용에서 대문자도 소문자처럼 검색이 되는지 확인하고자 한다면?
SELECT first_name||' '||last_name as NAME
, instr(first_name||' '||last_name, 'a') as 소문자a위치
, lower(first_name||' '||last_name) 소문자이름
FROM employees
WHERE instr(lower(first_name||' '||last_name), 'a') in (1, 5, 6, 7);
2. 문자열을 자르는 함수는 어떻게 쓰이는가?
//employees 테이블에서 휴대폰 번호를 첫번째부터 3개, 다섯번째부터 3개, 아홉번째부터 3개 출력
SELECT phone_number
, substr(phone_number, 1, 3) as coll
, substr(phone_number, 5, 3) as coll
, substr(phone_number, 9, 4) as coll
FROM employees
>> - 의 위치가 균등하기 않기 때문에 원하는대로 출력되지 않음
SELECT phone_number
, substr(phone_number, 1, 3) as coll
, substr(phone_number, 5, 3) as coll
, substr(phone_number, 9, 4) as coll
--------------------------------
, substr(phone_number, 1, 3) as coll //앞의 세자리는 고정
, substr(phone_number, 5, length(phone_number)) ph2 //앞 세자리 제외 출력
, instr(substr(phone_number, 5, length(phone_number)), '.') 점의 위치 // 점의 위치 출력
, substr(
substr(phone_number, 5, length(phone_number)), 1,
instr(substr(phone_number, 5, length(phone_number)), '.')-1) as 두번째
// 위 두가지를 사용하여 앞 세자리를 제외한 숫자들에서 점의 위치를 기준으로 문자를 잘라서 출력
, substr(
substr(phone_number, 5, length(phone_number))
, instr(substr(phone_number, 5, length(phone_number)), '.')+1
, length(substr(phone_number, 5, length(phone_number)))
) as 세번째
FROM employees
>>최종 SQL문
SELECT phone_number
, substr(phone_number, 1, 3) as 첫번쩨
, substr(
substr(phone_number, 5, length(phone_number)), 1,
instr(substr(phone_number, 5, length(phone_number)), '.')-1) as 두번째
, substr(
substr(phone_number, 5, length(phone_number))
, instr(substr(phone_number, 5, length(phone_number)), '.')+1
, length(substr(phone_number, 5, length(phone_number)))) as 세번째
FROM employees
예제는 간단해 보였지만 SQL문은 굉장히 복잡하네요,,, 어떤 문자 함수가 있고, 어떻게 사용하는지 많은 예제를 통해서 접하는 것이 중요할 것 같습니다. 오늘 학습은 여기서 마치도록 하겠습니다!

'공부 자료 > SQL' 카테고리의 다른 글
[14일차] 조작함수 사용하기 part4. 날짜 및 그룹 함 (0) | 2023.01.14 |
---|---|
[13일차] 조작함수 사용하기 part3. 데이터 정의 함수 (0) | 2023.01.13 |
[11일차] 조작함수 사용하기 part2-1. 문자 함수 (0) | 2023.01.12 |
[10일차] 조작함수 사용하기 part1 - 수치형 함수 (0) | 2023.01.10 |
[9일차] 실전 데이터 분석 (0) | 2023.01.09 |