All Articles

SQL 첫걸음 - 13강 문자열 연산

13강 문자열 연산

문자열 결합

문자열 결합이란 문자열 데이터를 결합하는 연산이다. 문자열 결합은 열 데이터 2개를 모아서 1개 열로 처리하고 싶은 경우에 자주 사용한다.

문자열 결합 연산자는 데이터베이스마다 다르다.

  • SQL Server : +
  • Oracle, DB2, PostgreSQL : ||
  • MySQL : CONCAT() 함수

CONCAT() 함수를 사용해서 문자열 연산을 해보자.

string_sample

no price quantity unit
1 100 10
2 230 24
3 1980 1

SELECT CONCAT(quantity, unit) FROM string_sample;

CONCAT(quantity, unit)
10개
24캔
1장

quantity 필드는 integer형이고 unit 필드는 string 필드지만 결합이 가능하다. 단, 정수형과 문자열형을 결합한 결과는 문자열형이 된다.

SUBSTRING() 함수

SUBSTRING() 함수는 문자열 일부분을 계산해서 반환하는 함수다. 연월일 날짜 데이터를 YYYYMMDD 형식으로 저장했을 때 연도만 추출하거나 월만 추출하고 싶을 때 이 함수를 쓴다.

SUBSTRING('20200906', 1, 4)
'2020'

SUBSTRING('20200906', 5, 2)
'09'

TRIM() 함수

TRIM() 함수는 문자열 앞뒤로 빈 칸(스페이스)이 있을 때 이를 제거해주는 함수다. 문자열 중간에 있는 스페이스는 제거하지 못한다. 고정길이 문자열(CHAR)형에 많이 사용하는 함수다.

TRIM('ABC    ')
'ABC'

CHARACTER_LENGTH() 함수, OCTET_LENGTH() 함수

CHARACTER_LENGTH() 함수는 문자열 길이를 계산해서 반환하는 함수다. CHAR_LENGTH()로 줄여서 사용할 수도 있다. OCTET_LENGTH() 함수는 문자열 길이를 바이트 단위로 계산해서 반환하는 함수다.

문자열 길이는 한글이든 아스키 문자든 문자 수로 계산하지만 문자열 바이트 길이는 같은 문자열이라고 하더라도 인코딩 방식에 따라 다르다. ‘EUC-KR’, ‘UTF-8’ 같은 문자열 인코딩 방식을 RDBMS에서는 ‘문자세트’라고 부른다. ‘EUC-KR’ 문자세트에서 아스키 문자 하나는 1바이트, 한글은 2바이트 용량을 차지하지만, ‘UTF-8’ 문자세트에서 한글은 3바이트 용량을 가진다. 아스키 문자는 ‘UTF-8’에서도 동일하게 1바이트다.

따라서 ‘A는 반각, 한은 전각’이라는 문자열에서 문자 수와 바이트 수는 각 문자세트별로 다음과 같다.

문자세트 문자 수 바이트 수
EUC-KR 12 19
UTF-8 12 26