본문 바로가기

Learning/SQL

문자형 함수

<함수>

문자, 숫자, 날짜 값 등을 조작, 각 데이터 타입끼리 변환(단일 행 함수)

하나의 테이블에 있는 하나의 행을 처리

다중행 함수는 한 열의 여러 값을 처리, 하나의 값으로 나타냄

 

<단일 행 함수>

 

    • 문자형 함수

    • 대 소문자 함수

      • 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, 13), --첫번째부터 3개의 문자를 잘라낸다.
SUBSTR (first_name, 24), --두번째부터 4개의 문자를 잘라낸다.
SUBSTR (first_name, 23), --두번째부터 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'12
--첫번째부터 찾는데 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, 43)='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

 

 

 

'Learning > SQL' 카테고리의 다른 글

날짜형 함수  (0) 2020.06.15
숫자형 함수  (0) 2020.06.15
IS NULL 연산자, ORDER BY  (0) 2020.06.15
LIKE 연산자  (0) 2020.06.15
BETWEEN  (0) 2020.06.12