내장 함수는 크게 제어 흐름 함수, 문자열 함수, 수학 함수, 날짜/시간 함수, 전체 텍스트 검색 함수, 형 변환 함수, XML 함수, 비트 함수, 보안/압축 함수, 정보 함수, 공간 분석 함수, 기타 함수 등으로 나눈다.
제어 흐름 함수 : 프로그램의 흐름을 제어
- IF(수식, 참, 거짓)
- IFNULL(수식 1, 수식 2) : 수식 1이 NULL이 아니면 수식 1이 반환되고, 수식 1이 NULL이면 수식 2가 반환
- NULLIF(수식 1, 수식 2) : 수식 1과 수식 2가 같으면 NULL을 반환하고, 다르면 수식 1을 반환
- CASE ~ WHEN ~ ELSE ~ END : CASE는 내장 함수가 아닌 연산자로 분류, 다중 분기에 사용될 수 있으므로 함께 알아두기
SELECT IF (100 > 200, '참', '거짓'); -- 거짓
SELECT IFNULL (NULL, '널'), IFNULL (100, '널'); -- NULL, 100
SELECT NULLIF(100, 100), NULLIF(200, 100); -- NULL, 200
SELECT CASE 10
WHEN 1 THEN '일'
WHEN 5 THEN '오'
WHEN 10 THEN '십'
ELSE '모름'
END AS 'CASE 연습'; -- 십
문자열 함수 : 문자열 조작
- ASCII(아스키 코드) : 문자의 아스키 코드값을 반환
- CHAR(숫자) : 숫자의 아스키 코드값에 해당하는 문자를 반환
SELECT ASCII('A'), CHAR(65); -- 65, A
- BIT_LENGTH(문자열) : 할당된 Bit 크기 또는 문자 크기를 반환
- CHAR_LENGTH(문자열) : 문자의 개수를 반환
- LENGTH(문자열) : 할당된 Byte 수를 반환
SELECT BIT_LENGTH('abc'), CHAR_LENGTH('abc'), LENGTH('abc'); -- 24, 3, 3
SELECT BIT_LENGTH('가나다'), CHAR_LENGTH('가나다'), LENGTH('가나다'); -- 72, 3, 9
-- MySQL은 기본적으로 UTF-8 코드를 사용하기 때문에 영문은 3BYTE를, 한글은 3*3=9BYTE를 할당
- CONCAT(문자열 1, 문자열2, ...) : 문자열을 이어줌
- CONCAT_WS(구분자, 문자열1, 문자열2, ...) : 구분자와 함께 문자열을 이어줌
SELECT CONCAT_WS('/', '2025', '01', '01'); -- 2025/01/01
- ELT(위치, 문자열1, 문자열2, ...) : 위치 번째에 해당하는 문자열 반환
- FIELD(찾을 문자열, 문자열1, 문자열2, ...) : 찾을 문자열의 위치를 찾아서 반환
- FIND_IN_SET(찾을 문자열, 문자열 리스트) : 찾을 문자열을 문자열 리스트에서 찾아서 위치를 반환
- INSTR(기준 문자열, 부분 문자열) : 기준 문자열에서 부분 문자열을 찾아 그 시작 위치를 반환
- LOCATE(부분 문자열, 기준 문자열) : INSTR()과 동일하지만 파라미터의 순서가 반대로 되어 있음
SELECT ELT(2, '하나', '둘', '셋'), FIELD('둘', '하나', '둘', '셋'),
FIND_IN_SET('둘', '하나,둘,셋'), INSTR('하나둘셋', '둘'), LOCATE('둘', '하나둘셋');
-- 둘, 2, 2, 3, 3
- FORMAT(숫자, 소수점 자릿수) : 숫자를 소수점아래 자릿수까지 표현. 천 단위마다 콤마(,) 표시
SELECT FORMAT(123456.123456, 4); --123,456.1235
- BIN(숫자) : 2진수의 값을 반환
- HEX(숫자) : 16진수의 값을 반환
- OCT(숫자) : 8진수의 값을 반환
SELECT BIN(31), HEX(31), OCT(31); -- 11111, 1F, 37
- INSERT(기준 문자열, 위치, 길이, 삽입할 문자열) : 기준 문자열의 위치부터 길이만큼을 지우고 삽입할 문자열을 넣음
SELECT INSERT('abcdefghi', 3, 4, '@@@@'), INSERT('abcdefghi', 3, 2, '@@@@'); -- ab@@@@ghi, ab@@@@efghi
- LEFT(문자열, 길이), RIGHT(문자열, 길이) : 왼쪽 또는 오른쪽에서 문자열의 길이만큼 반환
SELECT LEFT('abcdefghi', 3), RIGHT('abcdefghi', 3); -- abc, ghi
- UPPER(문자열), LOWER(문자열) : 문자열을 대문자, 소문자로 변경
SELECT LOWER('abcdEFGH'), UPPER('abcdEFGH'); -- abcdefgh, ABCDEFGH
- LPAD(문자열, 길이, 채울 문자열) : 문자열을 길이만큼 늘려 빈 곳을 채울 문자열로 채움(빈 곳이 왼쪽)
- RPAD(문자열, 길이, 채울 문자열) : 문자열을 길이만큼 늘려 빈 곳을 채울 문자열로 채움(빈 곳이 오른쪽)
SELECT LPAD('이것이', 5, '##'), RPAD('이것이', 5, '##'); -- ##이것이, 이것이##
- LTRIM(문자열), RTRIM(문자열) : 문자열의 왼쪽/오른쪽 공백을 제거. 중간의 공백은 제거되지 않음
SELECT LTRIM(' 이것이'), RTRIM('이것이 '); -- 이것이, 이것이
- TRIM(문자열) : 문자열의 앞뒤 공백을 모두 없앰
- TRIM(방향 자를_문자열, FROM 문자열) : 방향은 LEADING(앞), BOTH(양쪽), TRAILING(뒤)가 나올 수 있음
SELECT TRIM(' 이것이 '), TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재밌어요.ㅋㅋㅋ'); -- 이것이, 재밌어요.
- REPEAT(문자열, 횟수) : 문자열을 횟수만큼 반복
SELECT REPEAT('이것이', 3); -- 이것이이것이이것이
- REPLACE(문자열, 원래 문자열, 바꿀 문자열) : 문자열에서 원래 문자열을 찾아서 바꿀 문자열을 바꿔줌
SELECT REPLACE('이것이 MySQL이다', '이것이', 'This is'); -- This is MySQL이다
- REVERSE(문자열) : 문자열의 순서를 거꾸로 만듦
SELECT REVERSE('MySQL'); -- LQSyM
- SPACE(길이) : 길이만큼의 공백을 반환
SELECT CONCAT('이것이', SPACE(10), 'MySQL이다'); -- 이것이 MySQL이다
- SUBSTRING(문자열, 시작위치, 길이) 또는 SUBSTRING(문자열 FROM 시작위치 FOR 길이) : 시작 위치부터 길이만큼 문자를 반환. 길이가 생략되면 문자열의 끝까지 반환
SELECT SUBSTRING('대한민국만세', 3, 2); -- 민국
- SUBSTRING_INDEX(문자열, 구분자, 횟수) : 문자열에서 구분자가 왼쪽부터 횟수 번째에 나오면 그 이후의 오른쪽은 버림. 횟수가 음수면 오른쪽부터 세고 왼쪽을 버림
SELECT SUBSTRING_INDEX('cafe.naver.com', '.', 2), SUBSTRING_INDEX('cafe.naver.com', '.', -2);
-- cafe.naver, naver.com
'Database > MySQL' 카테고리의 다른 글
| [MySQL] 서브 쿼리 (0) | 2024.09.10 |
|---|---|
| [MySQL] 조인 (2) | 2024.09.10 |
| [MySQL] 변수와 형 변환 (0) | 2024.09.10 |
| [MySQL] 데이터 형식 (0) | 2024.09.10 |
| [MySQL] 테이블 생성과 데이터 조작 (0) | 2024.09.10 |