본문 바로가기
공부/mysql

Mysql 기본명령어 9 (문자열 연산)

by signature95 2022. 2. 7.
728x90
반응형

이전 포스트에 이어서 작성하는 내용입니다.

2022.01.27 - [공부/mysql] - Mysql 기본명령어 8 (수치 연산)

 

Mysql 기본명령어 8 (수치 연산)

이전 포스트에 이어서 작성하는 내용입니다. 2022.01.27 - [공부/mysql] - Mysql 기본명령어 7 (LIMIT, OFFSET) Mysql 기본명령어 7 (LIMIT, OFFSET) 이전 포스트에 이어서 작성하는 내용입니다. 2022.01.25 - [공..

signature95.tistory.com

 

데이터의 종류는 수치형 외에도 문자열형이 존재합니다.

 

따라서 이번에는 문자열 연산에 대해 알아보도록 하겠습니다.

 

연산자 연산형태 데이터 베이스
+ 문자열 결합 SQL Server
|| 문자열 결합 Oracle, DB2
CONCAT 문자열 결합 Mysql

 

SELECT * FROM sample35;

다음과 같은 데이터가 존재하는데, 이번에는 CONCAT을 활용하여 quantity, unit열을 결합하여 출력해보겠습니다.

 

SELECT

CONCAT(quantity, unit) FROM sample35;

위 처럼 결합을 하게 된다면, INT + STR 형태가 됩니다. 물론 출력된 데이터의 형태는 STR이 됩니다.

만약, 위와 같은 출력을 Oracle에서 하고 싶다면 || 연산자를, SQL Server에서 하고 싶다면 + 연산자를 사용합니다.

 

SUBSTRING

 

이번에는 문자열 일부분을 반환하는 함수인 SUBSTRING 함수에 대해 알아보도록 하겠습니다.

 

예시) 연월일 데이터는 YYYYMMDD로 8자리 형태로 지정되어 있습니다.  여기서 YYYY에 대한 정보를 추출하기 위해서는 다음과 같은 명령어를 사용하면 됩니다.

 

SUBSTRING('20220207', 1, 4);

>>>

'2022'

 

 

 

TRIM

 

TRIM 함수는 이름에서 알 수 있듯 공백을 제거해주는 함수입니다. 보통 통계에서 trimminng data은 이상치, 극단치를 제거해주는 것을 의미합니다. 마찬가지로 SQL에서도 공백을 제거해줄 수 있습니다.

 

TRIM은 문자열 앞뒤에 위치한 공백을 제거해주는 함수입니다. 하지만, 문자열 중간에 있는 공백은 제거되지 않습니다. 보통 SQL에서 CHAR(10)로 설정된 데이터 값에 4글자를 입력하게 되면 나머지 6자리는 공백으로 채워집니다.

 

따라서 불필요한 빈공간의 데이터가 존재하기에 이를 제거해주기 위해 TRIM을 사용하는 것입니다.

 

TRIM('12345     ')

>>>

'12345'

 

 

CHARACTER_LENGTH, OCTET_LENGTH

 

CHARACTER_LENGTH는 문자열의 길이를 계산해주는 함수입니다. VARCHAR 형의 데이터는 가변길이로 지정됩니다. 반환 값은 문자단위로 계산한 수치가 됩니다.

OCTET_LENGTH는 문자열의 길이를 바이트 값으로 계산해주는 함수입니다. 

 

CHARACTER_LENGTH를 사용하여 길이를 출력하는 경우엔, 화면상에 있는 문자열의 길이를 출력해줍니다. 하지만, OCTET_LENGTH의 경우에는 문자열이 저장된 크기를 의미하는 점에서 차이가 존재합니다.

 

또한, 인코딩 방식에 있어서도 OCTET_LENGTH가 반환하는 값은 각기 달라집니다.

 

한글 인코딩은 보통 UTF-8, EUC-KR을 사용하는데 한글이 각각 차지하는 bite는 UTF-8은 3Bite, EUC-KR은 2Bite의 용량을 차지합니다. 물론 ASCII 문자로 지칭되는 영어, 숫자, 기호는 두개 인코딩 방식 모두 1Bite를 차지합니다.

 

아까 예시로 가져온 sample35에서 이를 확인해보겠습니다.

unit 컬럼의 값은 '개', '통', '장'으로 한글 1자로 구성되어 있습니다.

 

CHARACTER_LENGTH로 출력한 경우에는 '1'의 값만 반환됩니다.

하지만 OCTET_LENGTH를 보면 3Bite로 값이 반환되는 것을 확인할 수 있습니다. 

아마 위 unit 데이터의 인코딩 방식은 UTF-8일 가능성이 높다고 판단할 수 있습니다.

728x90

댓글