IT 공부/DB

[ MySQL ]데이터베이스 문자열 함수 ( concat, substring, upper, lower)

JONGI-N CHOI 2024. 7. 4. 18:23

데이터베이스에서도 함수가 존재합니다. 

흔히 알고있는 count, max, min, sum, avg같은 집계함수도 있지만, 그 외에도 굉장히 많은 함수들이 존재합니다. 

그 중에서 문자열과 관련된 자주 사용되는 함수에대해서 알아보려고 합니다.

 

문자열


  • concat
  • substring
  • upper / lower

문자열관련 함수는 위의 세가지 종류에 대해서 알아보겠습니다.

concat

문자열을 연결하고 싶은 경우에 사용합니다.

SELECT concat("My Name is ", "JONGIN");

 

위와같이 "My Name is "라는 문자열과 "JONGIN"이라는 문자열을 합치기 위해 실행해보면,

위와같은 결과가 출력되는 것을 확인할 수 있습니다. 

 

결과 컬럼을 보면, 사용한 함수가 그대로 출력되기 때문에 가독성이 굉장히 떨어진다.
그래서 보통 함수를 사용하는 경우에는 별칭과 함께 사용하는 것이 좋다. 
예 : concat("My Name is ", "JONGIN") AS myName

 

concat함수의 매개변수로는 두개밖에 전달 못하는 것이아니라 여러개를 전달하는 것도 가능하다. 

SELECT concat("My Name is ", name, ", email is ", email) FROM users;

하지만, 여기서 주의할점은 concat으로 출력할 수 있는 문자열의 최대 길이에 제한이 있다는 것 입니다. 

SHOW VARIABLES LIKE 'group_concat_max_len';

위의 명령어를 통해서, 최대길이를 확인하는 것이 가능합니다.

기본값은 1024로 되어있습니다. 

 

만약, 1024보다 더 길게 출력이 필요한 경우에는, 해당 변수값을 변경하면 됩니다.

SHOW VARIABLES LIKE 'group_concat_max_len';

 

 

substring

부분 문자열을 추출하고 싶은 경우에 사용합니다. 

SELECT substring("JONGIN", 3, 3);

substring함수는 3개의 매개변수를 전달 받을 수 있습니다.

첫번째 인자는 대상이되는 문자열

두번째는 시작할 인덱스

세번째는 글자수

결과를 보면 NGI가 출력되는 것을 확인할 수 있습니다. 

인덱스를 3으로 지정했는데 GIN이아닌 NGI가 출력된 것에 대해서, 여기서 이상함을 느끼는 분들도 계실 수 있습니다. 
프로그래밍 언어에서 인덱스의 시작은 0으로 시작하는게 보통이지만, 이 substring함수의 인덱스는 시작이 1부터 시작합니다.

 

인덱스는 음수를 지정하는 것도 가능합니다. 

SELECT substring("JONGIN", -3, 3);

음수를 붙히게 되면, 앞에서부터 인덱스가 시작되는게아니라 뒤에서부터 시작되게 됩니다. 

위의 이미지를 참고하시면, -3을 인덱스로 전달했을 때, G가 시작 인덱스로 선택되는 것을 알 수 있습니다.

 

그리고, 세번째 인자는 생략하는 것이 가능합니다. 

생략했을 때에는, 시작 인덱스부터 문자열 끝까지 출력하게 됩니다. 

 

 

upper / lower

문자열을 모두 대문자 / 소문자로 변환할 때 사용합니다.

SELECT upper("jongin"); -- JONGIN
SELECT lower("JONGIN"); -- jongin

 


자주 사용되는 문자열 함수에대해서 알아봤는데, MySQL에는 문자열에 관련된 함수가 굉장히 많이 존재합니다. 

관심이 있는분은 아래 링크에서 활용성이 높은 함수를 찾아보는 것도 좋을 것 같습니다.

 

https://dev.mysql.com/doc/refman/8.4/en/string-functions.html

 

MySQL :: MySQL 8.4 Reference Manual :: 14.8 String Functions and Operators

14.8 String Functions and Operators Table 14.12 String Functions and Operators Name Description ASCII() Return numeric value of left-most character BIN() Return a string containing binary representation of a number BIT_LENGTH() Return length of argument

dev.mysql.com