본문 바로가기

DEVELOPMENT/SQL

[SQL] 문자열 연산

문자열 결합

 

문자열 결합이란 다음과 같이 문자열 데이터를 결합하는 연산이다.

-- 문자열 결합
'ABC' || '1234' -- 'ABC1234'

 

문자열을 결합하는 연산자에는 데이터베이스 제품마다 방언이 있으며 다음과 같은 차이를 가진다.

연산자/함수 연산 데이터베이스
+ 문자열 결합 SQL Server
|| 문자열 결합 Oracle, DB2, PostgreSQL
CONCAT 문자열 결합 MySQL

 

SELECT quantity + unit FROM sample1;
SELECT quantity || unit FROM sample1;
SELECT CONCAT(quantity, unit) FROM sample1;

 

 

SUBSTRING 함수

 

SUBSTRING 함수는 문자열의 일부분을 계산해서 반환해주는 함수이다. 데이터베이스에 따라서는 함수명이 SUBSTR인 경우도 있다.

-- 앞 4자리(년) 추출
SUBSTRING('20140125001', 1, 4) -- '2014'

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

 

 

TRIM 함수

 

TRIM 함수는 문자열의 앞뒤로 여분의 스페이스가 있을 경우 이를 제거해주는 함수로 문자열 도중에 존재하는 스페이스는 제거되지 않는다. 고정길이 문자열형에 대해 많이 사용하는 함수이다.

CHAR 형의 문자열형에서는 문자열의 길이가 고정되며 남은 공간은 스페이스로 채워진다. 이처럼 빈 공간을 채우기 위해 사용한 스페이스를 제거하는 데 TRIM 함수를 사용할 수 있다. 한편, 인수를 지정하는 것으로 스페이스 이외의 문자를 제거할 수도 있다.

-- TRIM으로 스페이스 제거하기
TRIM('ABC   ') -- 'ABC'

 

 

CHARACTER_LENGTH 함수

 

CHARACTER_LENGTH 함수는 문자열의 길이를 계산해 돌려주는 함수이다.

VARCHAR 형의 문자열은 가변 길이이므로 길이가 서로 다르다. CHARACTER_LENGTH 함수를 사용하면 문자열의 길이를 계산할 수 있다. 문자열의 길이는 문자 단위로 계산되어 수치로 반환된다. 또한 함수명은 CHAR_LENGTH로 줄여서 사용할 수 있다.

한편 OCTET_LENGTH 함수는 문자열의 길이를 바이트 단위로 계산해 돌려주는 함수이다.

 

+) 문자세트(character set)

알파벳이나 숫자, 기호는 'ASCII 문자'라고 불린다.

한글의 경우 'EUC-KR', 'UTF-8' 등의 인코드 방식을 주로 사용한다. 인코드 방식에서 데이터베이스나 테이블을 정의할 때 변경할 수 있다. 이를  RDBMS에서는 '문자세트'라고 부른다. 한 문자가 몇 바이트인지는 쓰이는 문자세트에 따라 다르다.

CHAR_LENGTH 함수를 사용하는 경우에는 아무런 문제가 되지 않는다. 한글이든 ASCII 문자든 문자 수로 계산되기 때문이다. 하지만 OCTET_LENGTH 함수의 경우는 문자 수가 아닌 바이트 단위로 길이를 계산하므로 주의할 필요가 있다. 

EUC-KR에서 ASCII 문자는 1바이트, 한글은 2바이트의 용량을 가진다.

한편 UTF-8에서 ASCII 문자는 1바이트, 한글은 3바이트의 용량을 가진다. 이렇게 문자세트에 따라 한 문자의 크기는 달라진다. 문자열 조작 함수로 문자 단위가 아닌 바이트 단위로 지정할 경우에는 문자세트에 주의할 필요가 있다.

 

 

 

 

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

[SQL] CASE 문  (0) 2023.05.30
[SQL] 날짜 연산  (0) 2023.05.30
[SQL] 결과 행 제한  (0) 2023.05.30
[SQL] 패턴 매칭  (0) 2023.05.30
[SQL] 데이터베이스와 SQL  (0) 2023.05.30