MariaDB | 내장 함수 (문자열, 숫자, 날짜/시간)

2025. 2. 4. 10:38기반기술/Database

문자열 관련 함수 

  1. 값 추출
    • ASCII(아스키 코드) : 아스키 코드 값 추출
    • CHAR(숫자) : 아스키 코드로 문자 추출
  2. 대소문자 변환
    • UPPER(문자열) : 소문자를 대문자로 변경
    • LOWER(문자열) : 대문자를 소문자로 변경 
  3. 숫자를 형식에 맞추어 반환 
    • FORMAT(숫자, 소수점 자릿수) : 1000단위마다 콤마(,) 표시를 해 주며 소수점 아래 자릿수(반올림)까지 표현
  4. 진수 표현
    • BIN(숫자) : 2진수 표현 
    • OCT(숫자) : 8진수 표현 
    • HEX(숫자) : 16진수 표현 
  5. 길이 반환
    • BIT_LENGTH(문자열) : 할당된 비트 크기 반환
    • CHAR_LENGTH(문자열) :  문자열의 길이 반환
    • LENGTH(문자열) : 할당된 BYTE 크기 반환
  6. 문자열 탐색
    • ELT(위치, 문자열1, 문자열2, ...) : 해당 위치의 문자열 반환
    • FIELD(찾을 문자열, 문자열1, 문자열2, ...) : 찾을 문자열 위치 반환
    • FIND_IN_SET(찾을 문자열, 문자열 리스트) : 찾을 문자열 위치 반환
    • INSTR(기준 문자열, 부분 문자열) : 기준 문자열에서 부분 문자열의 시작 위치 반환
    • LOCATE(부분 문자열, 기준 문자열) : INSTR과 동일하고 순서는 반대
  7. 문자열 합치기
    • CONCAT(문자열1, 문자열2, ...) : 문자열을 이어붙임
    • CONCAT_WS(구분자, 문자열1, 문자열2, ...) : 구분자와 함께 문자열을 이어붙임
  8. 문자열 지우고 삽입
    • INSERT(기준 문자열, 위치, 길이, 삽입할 문자열) : 기준 문자열의 위치부터 길이만큼을 지우고 삽입할 문자열을 끼워 넣는다.
  9. 문자열 반환
    • LEFT(문자열, 길이) : 왼쪽에서 문자열의 길이만큼을 반환
    • RIGHT(문자열, 길이) : 오른쪽에서 문자열의 길이만큼을 반환
    • SUBSTRING(문자열, 시작위치, 길이) : 시작 위치부터 길이만큼의 문자를 반환(길이를 생략하면 시작 위치부터 끝까지 반환)
    • SUBSTRING_INDEX(문자열, 구분자, 횟수) : 구분자가 왼쪽부터 횟수 번째 나오면 그 이후의 오른쪽은 버린다. 횟수가 음수일 경우 오른쪽부터 세고 왼쪽을 버린다.
  10. 문자열 채우기
    • LPAD(문자열, 길이, 채울 문자열) : 문자열을 길이만큼 왼쪽으로 늘린 후에 빈 곳을 문자열로 채운다.
    • RPAD(문자열, 길이, 채울 문자열) : 문자열을 길이만큼 오른쪽으로 늘린 후에 빈 곳을 문자열로 채운다. 
  11. 공백, 문자열 제거
    • TRIM(문자열) : 앞뒤 공백 제거
    • LTRIM(문자열) : 왼쪽 공백 제거
    • RTRIM(문자열) : 오른쪽 공백 제거
    • TRIM(방향 자를_문자열 FROM 문자열) :  해당 방향에 지정한 문자열을 제거할 수 있다.
      • 방향: LEADING(앞), BOTH(양쪽), TRAILING(뒤)
  12. 공백 반환
    • SPACE(길이) : 길이 만큼의 공백을 반환 
  13. 문자열 반복
    • REPEAT(문자열, 횟수) : 문자열을 횟수만큼 반복
  14. 문자열 치환
    • REPLACE(문자열, 찾을 문자열, 바꿀 문자열) : 문자열에서 문자열을 찾아 치환
  15. 순서 뒤집기
    • 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

 

숫자 관련 함수 

  1. 수학 
    • ABS(숫자) : 절대값 반환 
    • CEILING(숫자) : 올림값 반환
    • ROUND(숫자) : 반올림값 반환
    • FLOOR(숫자) : 버림값 반환
    • POW(숫자1, 숫자2) : 거듭제곱값 추출
    • SQRT(숫자) : 제곱근을 추출
    • MOD(숫자1, 숫자2) : 숫자 1을 숫자 2로 나눈 나머지 추출
      • 숫자1 % 숫자2
      • 숫자1 MOD 숫자2 
  2. 진수 변환 
    • CONV(숫자, 원래 진수, 변환할 진수) : 원래 진수에서 변환하고자 하는 진수로 변환
  3. 부호 확인
    • SIGN(숫자): 양수면 1, 0이면 0, 음수면 -1을 반환
  4. 값 버리기 
    • TRUNCATE(숫자, 정수) : 소수점을 기준으로 정수 위치까지 구하고 나머지는 버림
  5. 랜덤값
    • 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

 

날짜 및 시간 관련 함수 

  1. 날짜/시간 더하기
    • ADDDATE(날짜, 차이) : 날짜를 기준으로 차이를 더함
    • SUBDATE(날짜, 차이) : 날짜를 기준으로 날짜를 뺌
    • ADDTIME(날짜/시간, 시간) : 날짜 또는 시간을 기준으로 시간을 더함
    • SUBTIME(날짜/시간, 시간) : 날짜 또는 시간을 기준으로 시간을 뺌
  2. 날짜/시간 차이 구하기
    • DATEDIFF(날짜1, 날짜2) : 날짜1 - 날짜2의 일수를 반환
    • TIMEDIFF(날짜1 또는 시간1, 날짜1 또는 시간2) : 시간1 - 시간2의 결과를 구함
  3. 현재 시스템 날짜/시간 추출 
    • CURDATE() :  현재 연-월-일 추출
    • CURTIME() : 현재 시:분:초 추출
    • NOW() 또는 SYSDATE() : 현재 연-월-일 시:분:초 추출
  4. 날짜/시간에서 세부 추출 
    • YEAR(날짜), MONTH(날짜), DAYOFMONTH(날짜) : 연, 월, 일 추출 
    • HOUR(시간), MINUTE(시간), SECOND(시간), MICROSECOND(시간) : 시, 분, 초, 밀리초 추출
  5. 날짜/시간에서 형식 지정 추출 
    • DATE() : 연-월-일만 추출
    • TIME() : 시:분:초만 추출
    • MAKETIME(시, 분, 초) :  시, 분, 초를 이용해서 '시:분:초'의 TIME 형식을 만든다.
  6. 날짜/시간에서 특정 데이터 반환 
    • 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