본문 바로가기
  • 콩's 코딩노트
MySQL

MySQL의 문자열 처리 함수들 - concat , concat_ws, as , substring, replace, reverse, char_length, upper, lower

by Cong_S 2022. 5. 13.

SQL의 문자열 처리 함수들에 대해 알아보자.

 

예제 테이블의 모습

 

1. concat 함수 

-- 작가 이름의 문자열을 합쳐서 가져오고 싶다면?, concat()
-- 띄어쓰기는 ,' ', 로 줄 수 있다.
select concat(author_fname,' ',author_lname) from books;

concat 함수에 대해 알아보자.  괄호 안에 이어 붙여 출력할 컬럼을 , 콤마로 구분해 입력하면 된다.

띄어쓰기를 넣기 위해 '  ' 를 넣은 모습이다. 

 

이 때 출력된 컬럼이 concat....  로 길게 나오는데 간단하게 표현하기 위해

select concat(author_fname,' ',author_lname) as full_name from books;

 

as 를 추가해 새로 출력되는 컬럼의 별칭을 정해줄 수 있다.

 


2. concat_ws 함수

-- 컬럼의 문자열을 여러 개 붙여야할 때 내가 원하는 문자로 각 컬럼을 연결시킬 수 있는 함수 , concat_ws()
select concat_ws('-',author_fname, author_lname) as full_name from books;

concat_ws 는 괄호의 첫번째 값에 특정 문자를 입력해 컬럼간의 이어붙일 때 입력한 문자로 채워넣을 수 있다.

이어 붙일 컬럼이 여러 개일수록 사용이 편리한 함수이다.


 3. substring 함수

-- 제목을 처음부터 10글자까지만 가져오기 (SQL은 시작 숫자가 0이 아니고 1부터 시작, 파이썬과 헷갈림)
-- substring(컬럼이름, 시작숫자, 끝숫자)
select substring(title, 1, 10) as title from books;

10글자만 가져오게 하기( 공백 포함 )

파이썬의 슬라이싱과 비슷하게 

substring 함수로 원하는 문자열만 가져올 수 있다.

 

-- 제목의 맨 뒤에서 5번째 글자부터 끝까지 가져오기
select substring(title, -5) as title from books;

맨 뒤에서부터 가져오기

-- 제목의 처음부터 10글자를 가져오되, 뒤에 ...을 붙여서 가져오시오.
select concat(substring(title, 1, 10),'...') as Short_title from books;

concat과 substring 을 함께 사용한 모습


4. replace 함수

-- '나쁜놈아 그렇게 살지마라' 에서 특정 부분 변환시켜서 출력하기
select replace('나쁜놈아 그렇게 살지마라', '나쁜놈' , '***');

비속어 필터링과 같이 특정 부분을 변환해 출력한 모습이다.

 

-- 제목 컬럼에 들어있는 e를 3으로 바꿔서 가져오세요
select replace(title, 'e', 3) as title from books;


5. reverse 함수

-- 문자열의 순서를 거꾸로 뒤집는 함수
-- hello -> olleh
-- author_fname을 뒤집어서 가져오세요.
select reverse(author_fname) from books;

괄호에 컬럼만 입력하면 된다.


6. char_length 함수

-- 문자열의 길이 구하기, char_length()
-- 책 제목의 길이가 얼마나 될까?
select char_length(title) as length from books;

파이썬의 len 함수와 비슷하다.

 

-- 책 제목 길이는 12
-- 책 제목 길이는 15
select concat('책 제목 길이는',' ',char_length(title)) as length from books;

concat 함수와 함께 사용하여 문장으로 표현한 모습이다.


 7. upper, lower 함수

-- 대문자, 소문자 바꾸기
select upper(title) from books ;
select lower(title) from books ;

upper 함수 사용
lower 함수 사용

 

댓글