단일행함수 : 문자함수

SQL함수에는 두가지 유형이 있다.

  1. 단일행함수 : 행당 하나의 결과 반환
  2. 여러행함수 : 행 집합당 하나의 결과 반환 이 중 단일행함수에 대해 알아보자.

단일행함수종류

단일행함수는 총 5가지이다.

  1. 문자함수
  2. 숫자함수
  3. 날짜함수
  4. 변환함수
  5. 일반함수




문자함수

문자함수는 크게 변환함수와 문자 조작 함수로 나누어진다.

http://egloos.zum.com/pqowieuryt/v/18776




대소문자 변환함수

변환함수는 총 3가지가 있다.
대소문자를 변환한다.

기능 결과
LOWER(‘SQL Course’) sql course
UPPER(‘SQL Course’) SQL COURSE
INITCAP(‘SQL Course’) Sql Course
1
2
3
$ select_id, last_name
$ from employees
$ lower(last_name) = 'higgins';




문자조작함수

https://oraclejavastudy.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4%EA%B3%B5%EB%B6%80-218-%EB%AC%B8%EC%9E%90%EC%A1%B0%EC%9E%91-%ED%95%A8%EC%88%98

concat(expr1, expr2)

concat은 인수를 2개밖에 못 받는다.
만약 2개초과로 쓰고싶다면 concat을 중첩해서 사용해야한다.

예를 들어 last_name과 first_name을 합쳐서 full_name을 만들고싶다
concat이용한 구문과 연결연산자 이용한 구문의 출력값은 같다.
차이점은 concatl은 인수2개만 가능하고 연결연산자는 원하는만큼의 인수를 사용할 수 있다

1
2
3
4
5
6
7
//concat이용한 구문
$ select concat(last_name, first_name) as full_name
$ from employees;

//연결연산자(||) 이용한 구문
$ select last_name || first_name as full_name
$ from employees;

이때 last_name과 first_name 사이에 공백 한칸을 넣고싶다
그래서 처음에는 아래 코드를 작성했다.

1
2
3
4
$ select concat(last_name, ' ', first_name) as full_name
$ from employees;

//반환값에러 : invalid number of arguments

위 코드처럼 했더니 invalid number of arguments에러가 떴다.
즉, concat은 인수를 2개밖에 못 받기때문에 3개를 쓰려면 중첩해야한다.

1
2
3
//concat 중첩하기
$ select concat(concat(last_name, ' '), first_name) as full_name
$ from employees;

substr(expr1, expr2, expr3)

문자열의 일부분을 반환해주는 함수이다.

  • expr1 : 반환할 문자열
  • expr2 : 시작위치
    • 음수인 경우 뒤에서 시작위치 ex)-1이면 뒤에서 첫번째글자
  • expr3 : 반환할 문자갯수
    • 방향은 항상 왼쪽에서 오른쪽으로 문자갯수만큼 반환한다
    • 생략가능 : 생략되면 시작위치에서 끝까지 반환

주로 주민번호(770123-2123456)를 반환할때 사용한다.

1
2
3
4
5
$ select substr(770123-2123456, 1, 6)
//반환값 : 770123

$ select substr('Kochhar, -3, 2)
//반환값 : ha

instr(expr1, expr2)

문자열(expr1)로 부터 특정 문자(expr2)의 첫번째 위치값을 반환해주는 함수이다.

아래 문자열에는 o가 2개가 있다. 5번째와 7번째에 있는데 어느 값을 반환해줄까?
instr는 첫번째 위치값만 반환해준다.

1
2
3
$ select isnt('HelloWorld', 'o')

//반환값 : 5

lpad(expr1, expr2, expr3) 와 rpad(expr1, expr2, expr3)

오른쪽 정렬/왼쪽 정렬 해주는 함수

  • expr1 : 반환할 문자열
  • expr2 : 전체자리수
  • expr3 : 남는 공간을 채울 문자
    • 공백을 주면 오른쪽/왼쪽정렬을 표현할 수 있어 유용하다.
1
2
3
4
//lpad 오른쪽정렬
$ select lpad(last_name, 20, ' ')

//반환값 : 오른쪽정렬

trim(expr1 from expr2)

문자열(expr2)로부터 특정 문자(expr1)가 접두어나 접미어에 있다면 삭제(절단)해주는 함수이다.

(ex1) trim(‘H’ from ‘HHelloHWHorldHHH’) => elloHWHorld

한자리 숫자를 출력하려고 할때 01,02,03 등등으로 출력된다.
이때 0을 빼고 한자리만 출력할때 주로 사용한다.

length(expr1)

문자열의 길이를 반환해주는 함수이다.

1
2
3
$ select length('HelloWorld')

//반환값 : 10

replace(expr1, expr2, expr3)

문자열(expr1)로 부터 특정 문자(expr2)를 다른 문자(expr3)로 교체해주는 함수이다.

DB에 폰번호가 .로 저장되어있을때 우리가 보기 편하게 -로 바꿔줄수있다.

1
2
3
4
5
//기존데이터 : 010.1234.5678
$ select last_name, replace(phone_number, '.', '-') as mobile
$ from employees

//replace후 반환 : 010-1234-5678