[MySQL] String Functions and Operators (1)
대/소문자로 변환하기
SELECT UPPER('Cherry')
-- OUTPUT: CHERRY
SELECT LOWER('Cherry')
-- OUTPUT: cherry
UPPER(컬럼명 or 문자열)
: 모든 문자를 대문자로 반환해라.
LOWER(컬럼명 or 문자열)
: 모든 문자를 소문자로 반환해라.
문자열 치환하기
SELECT REPLACE(Salary, 0, '')
FROM EMPLOYEES
REPLACE(컬럼명 or 문자열, '기존 패턴', '대체 패턴')
: 문자열에 포함된 기존 패턴을 대체 패턴으로 바꿔서 반환해라.
• SELECT 로 조회하는 것이므로, REPLACE 함수로 인한 데이터 변경은 없다.
문자열 자르기(추출하기)
LEFT('Africa', 3) -- Afr
RIGHT('Africa', 3) -- ica
LEFT(컬럼명 or 문자열, 길이)
: 문자열을 왼쪽에서부터 길이만큼 반환해라.
RIGHT(컬럼명 or 문자열, 길이)
: 문자열을 오른쪽에서부터 길이만큼 반환해라.
SUBSTRING('Africa', 2, 3) -- fri
SUBSTR('Africa', 2) -- frica
SUBSTRING(컬럼명 or 문자열, 시작지점, 길이)
= SUBSTR(컬럼명 or 문자열, 시작지점, 길이)
: 문자열을 시작지점부터 길이만큼 반환해라. 단, 길이 미입력시 시작지점부터 문자열끝까지 반환한다.
SUBSTRING_INDEX('apple,banana,coconut,durian,fig', ',', 1)
-- apple
SUBSTRING_INDEX('apple,banana,coconut,durian,fig', ',', 2)
-- apple,banana
SUBSTRING_INDEX('apple,banana,coconut,durian,fig', ',', 3)
-- apple,banana,coconut
SUBSTRING_INDEX('apple,banana,coconut,durian,fig', ',', -1)
-- fig
SUBSTRING_INDEX('apple,banana,coconut,durian,fig', ',', -2)
-- durian,fig
SUBSTRING_INDEX(컬럼명 or 문자열, 구분자, n(= 구분자 카운트횟수))
: 문자열을 특정 구분자를 카운트하기 직전까지 반환해라.
- 구분자 카운트 횟수에 양수가 들어가면 구분자를 왼쪽부터 세고, 음수가 들어가면 오른쪽부터 센다.
[예시] 아래와 같이 구분자가 콤마 ' , ' 인 문자열이 있다고 하자.
a p p l e , b a n a n a , c o c o n u t , d u r i a n , f i g |
Q. 왼쪽에서부터 두번째 구분자 전까지 있는 문자열을 모두 추출하고 싶다면?
SUBSTRING_INDEX('apple,banana,coconut,durian,fig', ',', 2)
👉 apple,banana
a p p l e , b a n a n a , c o c o n u t , d u r i a n , f i g |
Q. 오른쪽에서부터 두번째 구분자 전까지 있는 문자열을 모두 추출하고 싶다면?
SUBSTRING_INDEX('apple,banana,coconut,durian,fig', ',', - 2)
👉 durian,fig
a p p l e , b a n a n a , c o c o n u t , d u r i a n , f i g |
문자열 합치기 - 1
SELECT CONCAT("My","SQL")
-- OUTPUT: MySQL
SELECT CONCAT_WS(",","My","SQL")
-- OUTPUT: My,SQL
CONCAT(컬럼명 or 문자열, 컬럼명 or 문자열, ... )
: 여러개의 문자열을 차례대로 연결하여 하나의 문자열로 반환해라.
CONCAT_WS(구분자, 컬럼명 or 문자열, 컬럼명 or 문자열, ... )
: 여러개의 문자열을 차례대로 연결하여 하나의 문자열로 반환해라. 구분자와 함께.
문자열 합치기 - 2 (그룹별)
SELECT class_num
, COUNT(DISTINCT stuff) AS cnt
, GROUP_CONCAT(DISTINCT stuff ORDER BY stuff) AS list_stuff
FROM Classroom
GROUP BY class_num
ORDER BY class_num
GROUP_CONCAT(컬럼명)
: 그룹별로 null이 아닌 값들을 연결하여 하나의 문자열로 반환해라.
• 집계함수이므로 GROUP BY 와 함께 사용한다⭐
• 함수 안에 쓸 수 있는 절은 다음과 같다.
- DISTINCT
- ORDER BY
- SEPARATOR (default는 콤마)
[참고]
MySQL Documentation - Reference Manual (string-functions)
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
MySQL Documentation - Reference Manual (aggregate-functions)
https://dev.mysql.com/doc/refman/5.7/en/aggregate-functions.html