MySQL 내장 함수 정리

By | 2022년 3월 17일
Table of Contents

MySQL 내장 함수 정리

수학 함수

ABS, MOD, POW, SQRT

SELECT ABS(-100);
SELECT MOD(14, 3), 14 % 3, 14 MOD 3; -- 나머지
SELECT POW(3, 2), SQRT(16); -- 제곱, 제곱근

CEILING, FLOOR, ROUND

SELECT CEILING(3.7), FLOOR(3.7), ROUND(3.7); -- 올림, 버림, 반올림
SELECT CEILING(3.789, 2), FLOOR(3.789, 2), ROUND(3.789, 2);

RAND, TRUNCATE

SELECT RAND(); - 랜덤
SELECT TRUNCATE(1234.6789, 2), TRUNCATE(1234.6789, -2); -- 버림

문자열 함수

ASCII, CHAR

SELECT ASCII('A');
SELECT CHAR(65);

BIT_LENGTH, CHAR_LENGTH, LENGTH (문자열 길이)

UTF8 에서 한글은 3바이트입니다.
CHAR_LENGTH 는 문자의 갯수, LENGTH 는 바이트 수를 나타냅니다.

SELECT BIT_LENGTH('abc'), CHAR_LENGTH('abc'), LENGTH('abc');
SELECT BIT_LENGTH('가나다'), CHAR_LENGTH('가나다'), LENGTH('가나다');

CONCAT, CONCAT_WS (문자열 합치기)

CONCAT_WS 는 구분자를 이용해 문자를 합칩니다.

SELECT CONCAT('2020', '01', '01');
SELECT CONCAT_WS('-','2020', '01', '01');

INSTR (찾기)

찾는 문자열이 없으면 0 을 반환합니다.

SELECT INSTR('abcd', 'b');

FORMAT, LPAD, RPAD, LTRIM, RTRIM, TRIM

3자리마다 콤마를 추가해 줍니다. 소수점 2자리까지 표시합니다.

SELECT FORMAT(123456789.1234, 2);
SELECT LPAD('1234', 6, '0'), RPAD('1234', 6, '0');
SELECT LTRIM('   abc'), RTRIM('abc   '), TRIM('  abc  ');

공백문자 이외 다른 문자도 TRIM 할 수 있습니다.

SELECT TRIM(BOTH 'a' FROM 'aababaa');

LEFT, RIGHT, MID, LCASE, UCASE, LOWER, UPPER

SELECT LEFT('가나다라마바', 3), RIGHT('가나다라마바', 3);
SELECT LCASE('aBcDe'), UCASE('aBcDe'); -- 대문자, 소문자
SELECT LOWER('aBcDe'), UPPER('aBcDe');
SELECT MID('aBcDe', 2, 3); -- 문자열, 시작위치, 갯수

REPLACE, SUBSTRING

SELECT REPLACE ('It is banana', 'banana', 'apple');
SELECT SUBSTRING('abcdef', 3, 2);   -- 문자열, 시작위치, 길이

SUBSTRING_INDEX

찾는 문자열이 n 회 등장하면 그 이후 문자열을 버립니다.
n 이 마이너스이면 오른쪽에서 시작합니다.

SELECT SUBSTRING_INDEX('aaa,bbb,ccc,ddd', ',', 2);
SELECT SUBSTRING_INDEX('aaa,bbb,ccc,ddd', ',', -2);

날짜

ADDDATE, SUBDATE, DATE_ADD, DATE_SUB

SELECT ADDDATE('2020-01-01', INTERVAL 31 DAY), SUBDATE('2020-01-01', INTERVAL 31 DAY);
SELECT DATE_ADD('2020-01-01', INTERVAL -31 DAY), DATE_SUB('2020-01-01', INTERVAL 31 DAY);

SELECT ADDDATE('2020-01-01', INTERVAL -1 HOUR);
SELECT ADDDATE('2020-01-01', INTERVAL -1 MINUTE);
SELECT ADDDATE('2020-01-01', INTERVAL -1 SECOND);

CURDATE, CURTIME, NOW, SYSDATE (오늘, 현재시간)

CURDATE, CURTIME 는 날짜 또는 시간만 반환합니다.
NOW, SYSDATE 는 날짜+시간을 반환합니다.

SELECT CURDATE(), CURTIME(), NOW(), SYSDATE();

YEAR, MONTH, DAYOFMONTH, HOUR, MINUTE, SECOND, MICROSECOND

SELECT YEAR(NOW()), MONTH(NOW()), DAYOFMONTH(NOW()),
       HOUR(NOW()), MINUTE(NOW()), SECOND(NOW()), MICROSECOND(NOW));

MONTHNAME, DAYNAME, DAYOFWEEK, WEEKDAY

SELECT MONTHNAME('20000721'); -- 영어 월이름
SELECT DAYNAME('2001-06-22'); -- 영어 요일이름
SELECT DAYOFWEEK('2003-03-21'); -- 요일 숫자, 월요일(0),화요일(1), ..., 일요일(6)
SELECT WEEKDAY('2003-03-21'); -- same as DAYOFWEEK

DATE, TIME, DATEDIFF, TIMEDIFF

SELECT DATE(NOW()), TIME(NOW());
SELECT DATEDIFF('2020-1-5', '2020-1-1'), TIMEDIFF('14:30:00', '06:30:00');
SELECT DAYOFWEEK(NOW()), MONTHNAME(NOW()), DAYOFYEAR(NOW());
SELECT LAST_DAY('2020-02-04'); -- 해당월의 마지막 날짜
SELECT TIME_TO_SEC('10:53:10');

DATE_FORMAT, CONVERT_TZ

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') FROM DUAL;
SELECT DATE_FORMAT(NOW(),'%H:%i:%S') FROM DUAL;

SELECT @@GLOBAL.TIME_ZONE, @@SESSION.TIME_ZONE;
SELECT CONCAT_WS(' ', DATE_FORMAT(NOW(),'%H:%i:%S'), @@SESSION.TIME_ZONE) FROM DUAL;

SELECT DATE_FORMAT(CONVERT_TZ(NOW(), 'UTC', 'Asia/Seoul'),'%H:%i:%S') FROM DUAL;

논리 함수

IF, IFNULL

SELECT IF(a>1, 'A', 'B'); -- 조건식, 참일때 반환값, 거짓일때 반환값
SELECT IFNULL(a, 'ERR'); -- 첫번째가 NULL 이면 두번째 값 반환

통계 함수

COUNT, AVG, SUM, MIN, MAX

SELECT COUNT(column), AVG(column), SUM(column), MIN(column), MAX(column);

답글 남기기