old posting/MySQL

[SQL] 단일행 함수와 그룹 함수 그리고 문자 함수(String)

마케팅스프린트 2021. 3. 29. 18:25

단일행 함수(Single-Row Function)는 테이블 데이터에 여러개(레코드)에 "각각 적용"되어 산출한다.

그룹 함수(Aggregate Function)는 여러개(레코드)를 동시에 입력받아 "한개의 결과값"을 산출한다.

  • 단일행 함수의 종류
    1. 문자 함수
    2. 숫자 함수
    3. 날짜 함수
    4. 변환 함수
    5. 일반 함수
  • INITCAP(문자열 또는 컬럼명) : 첫글자만 대문자로 출력하고 나머지는 전부 소문자로 출력하는 함수
    • SELECT INITCAP('hello world') FROM dual;
    • 공백이 있는 경우 단어의 시작 부분들이 대문자로 바뀐다.
  • LOWER(문자열 또는 컬럼명) : 입력되는 값을 전부 소문자로 변경하여 출력하는 함수
    • SELECT LOWER(id) FROM TEST;
  • UPPER(문자열 또는 컬럼명) : 입력되는 값을 전부 대문자로 변경하여 출력하는 함수
    • SELECT UPPER(id) FROM TEST;
  • LENGTH(문자열 또는 컬럼명) : 문자열의 길이(문자 개수) 반환
    • SELECT name, id, LENGTH(id) FROM TEST WHERE LENGTH(id) >= 9;
  • LENGTHB(문자열 또는 컬럼명) : 문자열의 바이트수 반환
    • SELECT name, id, LENGTHB(id) FROM TEST;
  • CONCAT(문자열 또는 컬럼명, 문자열 또는 컬럼명) : 둘 이상의 문자열을 입력한 순서대로 합쳐서 반환해주는 함수
    • SELECT CONCAT(name, no) FROM TEST;
  • SUBSTR('문자열 또는 컬럼명', 시작인덱스, 추출 할 글자수) : 문자열에서 특정 길이의 문자를 추출할 때 사용하는 함수
    • SELECT SUBSTR('ABCDE', 1, 3) FROM dual;
      • 시작 인덱스는 1부터 시작한다.
      • 시작 인덱스는 음수도 가능하며 뒤에서부터 자릿수를 계산한다.
      • 추출 할 글자수가 문자열 길이보다 크면 문자열 최대길이까지 추출한다.
      • 시작인덱스를 찾을 수 없을 떄는 NULL을 반환한다.
  • SUBSTRB() : SUBSTR() 함수와 문법은 동일하지만 추출 할 문자수가 아닌 추출 할 바이트수를 반환한다.
    • UTF-8 인코딩의 경우 한글은 한글자당 3byte로 인코딩된다.
  • INSTR('문자열', 찾는문자열, 시작인덱스, 몇번째 등장) : 주어진 문자열이나 컬럼에서 특정 글자의 위치를 찾아주는 함수
    • SELECT INSTR('ABC*', '*', 1, 1) FROM dual;
    • SELECT INSTR('ABC*', '*', -4, 2) FROM dual; -- 음수 인덱스는 음의 방향으로 검색 진행
      • 시작인덱스 : 음수 가능
      • 몇번째 등장 : default 1
      • 없으면 0을 리턴하며 DB에서는 0의 의미가 0번째를 의미하기 보다는 검색결과 없음을 나타낼 떄 많이 쓰인다. 따라서 인덱스에 0을 안쓰고 1부터 시작하는 경우가 많다.
  • LPAD('문자열', 자릿수, '채울 문자') : 지정한 길이만큼 왼쪽부터 특정문자로 채워주는 함수
    • SELECT LPAD('abc', 10, '*') FROM dual;
  • RPAD('문자열', 자릿수, '채울 문자') : 지정한 길이만큼 오른쪽부터 특정문자로 채워주는 함수
    • SELECT RPAD('abc', 10, '*') FROM dual;
  • LTRIM('문자열', '제거 할 문자') : 문자열 좌측 문자를 제거한다.
    • SELECT LTRIM('AAABC', 'A') FROM dual;
  • RTRIM('문자열', '제거 할 문자') : 문자열 우측 문자를 제거한다.
    • SELECT RTRIM('ABCCC', 'C') FROM dual;
  • REPLACE('문자열', '문자1', '문자2') : '문자열'에서 '문자1'이 있으면 '문자2'로 치환한다.
    • SELECT REPLACE('ABCCC', 'C', 'D') FROM dual;