11. SQL 문자열 연산

1. 11. 문자열 연산

1.1. 문자열 결합

  • 문자열 결합 사례
1
'ABC' || '1234' -> 'ABC1234'
  • 데이터베이스별 문자열 결합의 차이
연산자/함수 연산 DB
+ 문자열결합 SQL Server
|| 문자열결합 Oracle, PostgreSQL
CONCAT 문자열결합 Mysql
  • 문자열 결합 예제
1
2
select * from sample35;
select CONCAT(quantity, unit) from sample35;
  • unit열은 문자열형이고, quantity 열은 INTEGER행의 열입니다.
  • 문자열 결합시 Mysql에서는 CONCAT을 사용합니다. Oracle은 문자열 결합 ||

1.2. SUBSTRING 함수

  • 정의

문자열의 일부분을 계산해서 반환해주는 함수

  • SUBSTRING 함수 예시

블로그 시스템 업로드 특정 데이터 파싱
날짜 데이터 포맷 형식의 YYYYMMDD 문자열 데이터 파싱(YYYY, MM, DD)

1
2
3
SUBSTRING('20140125001',1,4) -> '2014'4자리(년) 추출

SUBSTRING('20140125001',5,2) -> '01' 5째 자리부터 2자리(월) 추출

1.3. TRIM 함수

  • 정의

문자열의 앞뒤로 여분의 스페이스가 있을 경우 공백 제거 함수입니다. 그러나, 문자열 도중에 존재하는 스페이스는 제거되지 않습니다.
고정길이 문자열에 많이 사용하는 함수(CHAR 문자열형)
12 45 와 같은 경우를 예를 들 수 있습니다.

  • TRIM 함수 예시
1
TRIM('ABC    ') -> 'ABC'

1.4. CHARACTER_LENGTH 함수

  • 정의

문자열의 길이를 계산해 돌려주는 함수입니다. VARCHAR형의 문자열은 가변 길이이므로 길이가 서로 다릅니다.
이에 따라 CHARACTER_LENGTH 함수를 사용하면 문자열의 길이를 계산할 수 있습니다.
CHARACTER_LENGTH → CHAR_LENGTH로 함수를 줄여서 사용도 가능합니다.

  • OCTET_LENGTH 함수

문자열의 길이를 바이트 단위로 계산해주는 함수

  • 문자열 데이터의 특징
  • 데이터단위는 바이트 단위이며 하나의 데이터가 몇 바이트의 저장공간을 필요로 하는지는 인코드 방식 or 인코딩 방식 에 따라 결정됩니다.
  • 즉, 문자를 수치화(인코딩) 하는 방식에 따라서 저장공간의 크기가 달라질 수 있습니다.

예) 한글 2byte, 알파벳 1byte

  • 간혹 문자세트(Character set)에 따라 길이가 문자 수로 간주될 수도 있습니다.
  • 문자 세트(character set)
  • 알파벳 반각문자, 한글 전각문자
  • 반각문자는 전각문자 폭의 절반이며 저장용량 또한 전각문자쪽이 더 크다. 반각의 알파벳이나 숫자의 기호(ASCII 문자)라고 일컫음.
  • 한글은 EUC-KR, UTF-8등의 인코딩 방식을 사용한다.
  • 즉, RDBMS에서는 이러한 것들을 문자세트라고 부릅니다.
  • CHAR_LENGTH() 함수는 ASCII 문자든 문자 수로 계산되기때문에 사용하는데 큰 지장이 없다. 하지만, OCTET_LENGTH() 함수의 경우 문자수가 아닌 바이트 단위로 길이를 계산하므로 주의가 필요합니다.
  • 문자세트에서 문자수와 바이트 수
문자세트 문자수 바이트 수
EUC-KR 12 19
UTF-8 12 26
  • EUC-KR ASCII 문자는 1바이트 한글은 2바이트의 용량
  • UTF-8에서는 ASCII 문자는 1바이트, 한글은 3바이트의 용량