관리자 글쓰기
[mySQL] substring 함수, 그 외의 함수.
2020. 2. 5. 15:40 - MunJunHyeok

저번 게시글에서 sampleDB를 이용해 집계함수의 사용에 대해 살펴보았습니다.

 

Sample DB 설정 방법은 다음 링크를 참조하세요. (https://m-datastudy.tistory.com/5)

 

이번에는 마찬가지로 SELECT ~ FROM 쿼리(구문)에 사용할 수 있는 집계함수 외의 함수를 알아볼것입니다. 저번 게시물 (https://m-datastudy.tistory.com/10)를 보신 분들은 이제 레코드의 개수나 숫자로 된 레코드 값의 합, 평균 등을 알아볼 수 있고, 특정 기준에 따라 레코드를 묶을 수도 있습니다. 

 

먼저 함수는 저번과 이번 게시물에 적힌 것보다 훨씬 많습니다. 지금 쓰려는 것은 그 중 기본적이라고 생각되는 함수인것입니다.

 

1. SUBSTRING('문자열' , offset, limit) 

SUBSTRING 함수는 문자열에서 원하는 부분만 뽑아내는 함수입니다.

FROM 구문이 반드시 필요하지는 않습니다. 다음과 같이 사용합니다.

-> SELECT SUBSTRING('문자열' , offset, limit);

-> SELECT SUBSTRING('2019-03-19' , 6, 2);

 

또한 모든 함수는 반드시 정해진 인자에 맞춰서 사용해야만 합니다. 인자란 ('문자열', offset, limit)의 부분을 의미합니다.

 

1. '문자열' 부분은 우리가 뽑아내고싶은 글자가 있는 문장이나 긴 텍스트를 넣습니다.

 

2. offset 부분은 저번에 살펴보았던 LIMIT~OFFSET~ 구문처럼 어디서 부터 텍스트를 뽑아낼 것인지 숫자로 정합니다.

예를 들어 '2019-03-19' 문자열에서 첫번째 글자인 '2'가 1번째 글자이고 '0'이 2번째, '1'이 3번째, '9'가 4번째 글자입니다.

 

3. limit 부분은 몇글자를 뽑아낼지 정합니다.

 

 

정리하자면, SELECT SUBSTRING('2019-03-19' , 6, 2); 쿼리는 '2019-03-19'라는 문장의 6번째 글자부터 2글자를 찾아 출력하라는 뜻입니다. 결과값은 '03'이 됩니다. 작은 따옴표 안의 모든 글이 텍스트입니다. 따라서 ' - ' 또한 텍스트입니다.

 

2. TRIM('문자열')

 

TRIM 함수는 문자열 앞 뒤에 있는 공백을 제거합니다. ' 서울특별시 '를 함수 처리 할 경우 '서울특별시'로 출력됩니다.

단, 문자 내부의 공백은 제거되지 않습니다. substring처럼 반드시 FROM이 필요하지는 않습니다.

-> SELECT TRIM(' 문자열 ');

 

앞 뒤의 공백만 제거된다.

 

3. CHAR_LENGTH('문자열'), OCTET_LENGTH('문자열')

 

CHAR_LENGTH 함수는 문자열의 길이. 즉, 글자수를 알려주는 함수입니다. 다음과 같이 사용합니다.

-> SELECT CHAR_LENGTH('문자열');

-> SELECT CHAR_LENGTH('123');

 

123 문자열은 3글자이다. 한글도 사용 가능하다.

OCTET_LENGTH 함수는 문자열의 byte 수. 즉, 용량을 알려주는 함수입니다.

일반적으로 문자 하나 당 숫자 및 영어는 1byte. 한글은 2byte입니다. 다음과 같이 사용합니다.

-> SELECT OCTET_LENGTH('문자열');

-> SELECT OCTET_LENGTH('123abc가나다');

123(숫자, 3byte) + abc(영어, 3byte) + 가나다(한글 6byte)로 모두 합해 12 byte입니다.

 

 

4. ROUND(컬럼명/숫자, 반올림위치)

 

ROUND 함수는 반올림해주는 함수입니다. 어느 위치에서 반올림 할 지도 직접 정할 수 있습니다. 

mySQL에서는 2가 소숫점 둘째 자리로 반올림해줍니다. 1이 첫째 짜리로, -1이 1의 자리, -2가 10의 자리로 반올림해주는 식입니다. 소숫점 둘째 자리에서 반올림 해주는 것이 아니라 결과값이 소숫점 둘째자리로 출력됩니다.

-> SELECT ROUND(컬럼명/숫자, 반올림 위치);

-> SELECT ROUND(컬럼명, 2) FROM 테이블명;

-> SELECT ROUND(5961.6651, 2);

 

컬럼명이 들어갈 경우 컬럼의 숫자가 반올림 됩니다. 컬럼명 일 경우 FROM이 필요하고, 숫자형이어야 합니다.

 

5. CONCAT('문자열1'/컬럼명, '문자열2'/컬럼명)

 

CONCAT 함수는 여러개의 문자열을 합칠 수 있는 함수입니다. 앞 뒤 글자가 합쳐집니다. 컬럼명일 경우엔 자료형이 숫자형 혹은 문자형이어야 합니다. 

 

컬럼명 + 문자열도 가능합니다. 예를 들어,

-> SELECT CONCAT(customerNumber, '번 고객') FROM customers;

일 경우에, 컬럼 내의 모든 레코드의 뒤에 '번 고객'이 합쳐져 출력됩니다.

 

컬럼명 + 문자열의 조합

 

문자열 + 문자열의 조합