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);