데이터베이스에서도 함수가 존재합니다.
흔히 알고있는 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
'IT 공부 > DB' 카테고리의 다른 글
[ MySQL ] 외래키 설정으로 인한, 데이터 삭제 변경이 안되는 경우 해결 방법 3가지 (1) | 2024.07.09 |
---|---|
[DB] 집계함수와 그룹핑(GROUP BY, HAVING) (0) | 2024.07.02 |
[DB] 데이터 베이스 정규화 (제 1 정규화, 제 2정규화, 제 3정규화) (0) | 2024.07.01 |
컬럼 수정하기 (제약조건, 컬럼명, 데이터 타입) (0) | 2024.06.24 |
[ DB ] LIKE 조건에 서브쿼리와 조인을 이용하는 방법 (0) | 2022.12.11 |