MariaDB | 내장 함수 (문자열, 숫자, 날짜/시간)
2025. 2. 4. 10:38ㆍ기반기술/Database
문자열 관련 함수
- 값 추출
- ASCII(아스키 코드) : 아스키 코드 값 추출
- CHAR(숫자) : 아스키 코드로 문자 추출
- 대소문자 변환
- UPPER(문자열) : 소문자를 대문자로 변경
- LOWER(문자열) : 대문자를 소문자로 변경
- UPPER(문자열) : 소문자를 대문자로 변경
- 숫자를 형식에 맞추어 반환
- FORMAT(숫자, 소수점 자릿수) : 1000단위마다 콤마(,) 표시를 해 주며 소수점 아래 자릿수(반올림)까지 표현
- 진수 표현
- BIN(숫자) : 2진수 표현
- OCT(숫자) : 8진수 표현
- HEX(숫자) : 16진수 표현
- 길이 반환
- BIT_LENGTH(문자열) : 할당된 비트 크기 반환
- CHAR_LENGTH(문자열) : 문자열의 길이 반환
- LENGTH(문자열) : 할당된 BYTE 크기 반환
- 문자열 탐색
- ELT(위치, 문자열1, 문자열2, ...) : 해당 위치의 문자열 반환
- FIELD(찾을 문자열, 문자열1, 문자열2, ...) : 찾을 문자열 위치 반환
- FIND_IN_SET(찾을 문자열, 문자열 리스트) : 찾을 문자열 위치 반환
- INSTR(기준 문자열, 부분 문자열) : 기준 문자열에서 부분 문자열의 시작 위치 반환
- LOCATE(부분 문자열, 기준 문자열) : INSTR과 동일하고 순서는 반대
- ELT(위치, 문자열1, 문자열2, ...) : 해당 위치의 문자열 반환
- 문자열 합치기
- CONCAT(문자열1, 문자열2, ...) : 문자열을 이어붙임
- CONCAT_WS(구분자, 문자열1, 문자열2, ...) : 구분자와 함께 문자열을 이어붙임
- CONCAT(문자열1, 문자열2, ...) : 문자열을 이어붙임
- 문자열 지우고 삽입
- INSERT(기준 문자열, 위치, 길이, 삽입할 문자열) : 기준 문자열의 위치부터 길이만큼을 지우고 삽입할 문자열을 끼워 넣는다.
- 문자열 반환
- LEFT(문자열, 길이) : 왼쪽에서 문자열의 길이만큼을 반환
- RIGHT(문자열, 길이) : 오른쪽에서 문자열의 길이만큼을 반환
- SUBSTRING(문자열, 시작위치, 길이) : 시작 위치부터 길이만큼의 문자를 반환(길이를 생략하면 시작 위치부터 끝까지 반환)
- SUBSTRING_INDEX(문자열, 구분자, 횟수) : 구분자가 왼쪽부터 횟수 번째 나오면 그 이후의 오른쪽은 버린다. 횟수가 음수일 경우 오른쪽부터 세고 왼쪽을 버린다.
- LEFT(문자열, 길이) : 왼쪽에서 문자열의 길이만큼을 반환
- 문자열 채우기
- LPAD(문자열, 길이, 채울 문자열) : 문자열을 길이만큼 왼쪽으로 늘린 후에 빈 곳을 문자열로 채운다.
- RPAD(문자열, 길이, 채울 문자열) : 문자열을 길이만큼 오른쪽으로 늘린 후에 빈 곳을 문자열로 채운다.
- 공백, 문자열 제거
- TRIM(문자열) : 앞뒤 공백 제거
- LTRIM(문자열) : 왼쪽 공백 제거
- RTRIM(문자열) : 오른쪽 공백 제거
- TRIM(방향 자를_문자열 FROM 문자열) : 해당 방향에 지정한 문자열을 제거할 수 있다.
- 방향: LEADING(앞), BOTH(양쪽), TRAILING(뒤)
- 공백 반환
- SPACE(길이) : 길이 만큼의 공백을 반환
- 문자열 반복
- REPEAT(문자열, 횟수) : 문자열을 횟수만큼 반복
- 문자열 치환
- REPLACE(문자열, 찾을 문자열, 바꿀 문자열) : 문자열에서 문자열을 찾아 치환
- 순서 뒤집기
- REVERSE(문자열) : 문자열의 순서를 거꾸로 뒤집음
-- 1. 값 추출
SELECT ASCII('A'), CHAR(65); -- 65, A
-- 2. 대소문자 변환
SELECT UPPER('Hello World!') -- HELLO WORLD!
,LOWER('Hello World!'); -- hello world!
-- 3. 숫자를 형식에 맞추어 반환
SELECT FORMAT(123123123123.567567, 3); -- 123,123,123,123.568
-- 4. 진수 표현
SELECT BIN(65), OCT(65), HEX(65); -- 1000001, 101, 41
-- 5. 길이 반환
SELECT BIT_LENGTH('pie'), CHAR_LENGTH('pie'), LENGTH('pie'); -- 24, 3, 3
-- 한글 값은 저장 시 3byte
SELECT BIT_LENGTH('파이'), CHAR_LENGTH('파이'), LENGTH('파이'); -- 48, 2, 6
-- 6. 문자열 탐색
SELECT
ELT(2, '사과', '딸기', '바나나') -- 딸기
, FIELD('딸기', '사과', '딸기', '바나나') -- 2
, FIND_IN_SET('바나나', '사과,딸기,바나나') -- 3
, LOCATE('딸기', '사과딸기바나나'); -- 3
-- 7. 문자열 합치기
SELECT CONCAT('호랑이', '기린', '토끼'); -- 호랑이기린토끼
SELECT CONCAT_WS(',', '호랑이', '기린', '토끼'); -- 호랑이,기린,토끼
-- 8. 문자열 지우고 삽입
SELECT INSERT('내 이름은 아무개입니다.', 7, 3, '홍길동');
-- 9. 문자열 반환
SELECT LEFT('Hello World!', 3) -- Hel
,RIGHT('Hello World!', 3); -- ld!
SELECT
SUBSTRING('안녕하세요 반갑습니다.', 7, 2) -- 반갑
, SUBSTRING('안녕하세요 반갑습니다.', 7); -- 반갑습니다.
SELECT
SUBSTRING_INDEX('hong.test@gmail.com', '.', 2) -- hong.test@gmail
, SUBSTRING_INDEX('hong.test@gmail.com', '.', -2); -- test@gmail.com
-- 10. 문자열 채우기
SELECT LPAD('왼쪽', 6, '@') -- @@@@왼쪽
,RPAD('오른쪽', 6, '@'); -- 오른쪽@@@
-- 11. 공백, 문자열 제거
SELECT TRIM(' 양쪽 '), LTRIM(' 왼쪽 '), RTRIM(' 오른쪽 ');
SELECT TRIM(BOTH '@' FROM '@@@mariadb@@@'); -- mariadb
-- 12. 공백 반환
SELECT CONCAT('제 이름은', SPACE(5), '이고 나이는', SPACE(3), '세 입니다.');
-- 제 이름은 이고 나이는 세 입니다.
-- 13. 문자열 반복
SELECT repeat('재밌어', 3); -- 재밌어재밌어재밌어
-- 14. 문자열 대체
SELECT REPLACE('마리아db', '마리아', 'maria'); -- mariadb
-- 15. 문자열 뒤집기
SELECT REVERSE('hello'); -- olleh
숫자 관련 함수
- 수학
- ABS(숫자) : 절대값 반환
- CEILING(숫자) : 올림값 반환
- ROUND(숫자) : 반올림값 반환
- FLOOR(숫자) : 버림값 반환
- POW(숫자1, 숫자2) : 거듭제곱값 추출
- SQRT(숫자) : 제곱근을 추출
- MOD(숫자1, 숫자2) : 숫자 1을 숫자 2로 나눈 나머지 추출
- 숫자1 % 숫자2
- 숫자1 MOD 숫자2
- 진수 변환
- CONV(숫자, 원래 진수, 변환할 진수) : 원래 진수에서 변환하고자 하는 진수로 변환
- 부호 확인
- SIGN(숫자): 양수면 1, 0이면 0, 음수면 -1을 반환
- 값 버리기
- TRUNCATE(숫자, 정수) : 소수점을 기준으로 정수 위치까지 구하고 나머지는 버림
- 랜덤값
- RAND(): 랜덤값 0이상 1 미만 임의의 실수를 구한다.
- FLOOR((RAND() * (n - m) + m) : m <= 임의의 정수 < n
- 1부터 10까지 난수 발생: FLOOR(RAND() * (11 - 1) + 1);
-- abs
SELECT ABS(123), ABS(-123); -- 123
-- ceiling(올림), floor(내림), round(반올림)
SELECT CEILING(1234.34), FLOOR(1234.56), ROUND(1234.56); -- 1235, 1234, 1235
-- conv(변환대상숫자, 원래진수, 변환할진수)
SELECT CONV('A', 16, 10), CONV('A', 16, 2), CONV(1010, 2, 8); -- 10, 1010, 12
-- mod
SELECT MOD(75, 10), 75 % 10, 75 MOD 10; -- 5
-- pow : 거듭제곱 , sqrt : 제곱근
SELECT POW(2, 4), SQRT(16); -- 16, 4
-- rand : 0 이상 1 미만의 임의의 실수 반환
SELECT RAND(); -- 0.4695111470944352
-- m <= 임의의 정수 < n 을 구하고 싶다면 FLOOR(RAND() * (n - m) + m)
SELECT FLOOR(RAND() * (11 - 1) + 1); -- 3
-- sign
SELECT SIGN(10.1), SIGN(0), SIGN(-10.1); -- 1, 0, -1
-- truncate
SELECT TRUNCATE(12345.12345, 2), TRUNCATE(12345.12345, -2); -- 12345.12, 12300
날짜 및 시간 관련 함수
- 날짜/시간 더하기
- ADDDATE(날짜, 차이) : 날짜를 기준으로 차이를 더함
- SUBDATE(날짜, 차이) : 날짜를 기준으로 날짜를 뺌
- ADDTIME(날짜/시간, 시간) : 날짜 또는 시간을 기준으로 시간을 더함
- SUBTIME(날짜/시간, 시간) : 날짜 또는 시간을 기준으로 시간을 뺌
- 날짜/시간 차이 구하기
- DATEDIFF(날짜1, 날짜2) : 날짜1 - 날짜2의 일수를 반환
- TIMEDIFF(날짜1 또는 시간1, 날짜1 또는 시간2) : 시간1 - 시간2의 결과를 구함
- 현재 시스템 날짜/시간 추출
- CURDATE() : 현재 연-월-일 추출
- CURTIME() : 현재 시:분:초 추출
- NOW() 또는 SYSDATE() : 현재 연-월-일 시:분:초 추출
- 날짜/시간에서 세부 추출
- YEAR(날짜), MONTH(날짜), DAYOFMONTH(날짜) : 연, 월, 일 추출
- HOUR(시간), MINUTE(시간), SECOND(시간), MICROSECOND(시간) : 시, 분, 초, 밀리초 추출
- 날짜/시간에서 형식 지정 추출
- DATE() : 연-월-일만 추출
- TIME() : 시:분:초만 추출
- MAKETIME(시, 분, 초) : 시, 분, 초를 이용해서 '시:분:초'의 TIME 형식을 만든다.
- 날짜/시간에서 특정 데이터 반환
- DAYOFWEEK(날짜) : 요일 반환 (1~7)
- MONTHNAME(날짜) : 달의 영어 이름 반환
- DAYOFYEAR(날짜) : 해당 년도에서 몇 일이 흘렀는지 반환
- LAST_DAY(날짜) : 해당 날짜의 달에서 마지막 날의 날짜를 반환
- MAKEDATE(연도, 정수) : 해당 연도의 정수일만큼 지난 날짜를 반환
- QUARTER(날짜) : 해당 날짜의 분기를 반환
- TIME_TO_SEC(시간) : 시간을 초 단위로 반환
-- 1. 날짜/시간 더하기
SELECT
ADDDATE('2023-05-31', INTERVAL 30 DAY) -- 2023-06-30
, ADDDATE('2023-05-31', INTERVAL 6 MONTH) -- 2023-11-30
, ADDDATE('2023-05-31', INTERVAL 1 YEAR) -- 2024-05-31
, SUBDATE('2023-05-31', INTERVAL 30 DAY) -- 2023-05-01
, SUBDATE('2023-05-31', INTERVAL 6 MONTH) -- 2022-11-30
, SUBDATE('2023-05-31', INTERVAL 1 YEAR); -- 2022-05-31
SELECT
ADDTIME('2023-05-31 09:00:00', '1:0:1') -- 2023-05-31 10:00:01
, SUBTIME('2023-05-31 09:00:00', '1:0:1'); -- 2023-05-31 07:59:59
-- 2. 날짜/시간 차이 구하기
SELECT DATEDIFF('2023-05-31', '2023-02-27'); -- 93
SELECT TIMEDIFF('17:07:11', '13:06:10'); -- 04:01:01
-- 3. 현재 시스템 날짜/시간 반환
SELECT CURDATE(), CURRENT_DATE(), CURRENT_DATE; -- 2025-02-03
SELECT CURTIME(), CURRENT_TIME(), CURRENT_TIME; -- 11:11:43
SELECT NOW(), LOCALTIME, LOCALTIME(), LOCALTIMESTAMP, LOCALTIMESTAMP(); -- 2025-02-03 11:11:43
-- 4. 날짜/시간에서 세부 추출
SELECT YEAR(CURDATE()), MONTH(CURDATE()), DAYOFMONTH(CURDATE()); -- 2025, 2, 3
SELECT HOUR(CURTIME()), MINUTE(CURTIME()), SECOND(CURTIME()), MICROSECOND(6); -- 11, 16, 24, 968527
-- 5. 날짜/시간에서 형식 지정 추출
SELECT DATE(NOW()); -- 2025-02-03
SELECT TIME(NOW()); -- 11:11:43
SELECT MAKETIME(12,30,56); -- 12:30:56
-- 6. 날짜/시간에서 특정 데이터 반환
SELECT DAYOFWEEK(CURDATE()),MONTHNAME(CURDATE()), DAYOFYEAR(CURDATE()); -- 2, February, 34
SELECT LAST_DAY('2023-02-01'); -- 2023-02-28
SELECT MAKEDATE(2023, 34); -- 2023-02-03
SELECT QUARTER(CURDATE()); -- 1
SELECT TIME_TO_SEC(CURTIME()); -- 40123