MySQL 내장함수
- 사용자의 편의를 위해 다양한 기능의 내장 함수를 미리 정의하여 제공
- 대표적인 내장 함수의 종류
- 문자열 함수
- 수학 함수
- 날짜와 시간 함수
LENGTH
SELECT LENGTH('123456789');
CONCAT
- 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환
- 전달받은 문자열 중 하나라도 NULL이 존재하면 NULL을 반환
SELECT CONCAT('My', 'SQL is', 'interesting'),
CONCAT('My', 'NULL', 'interesting');
LOCATE
- 문자열 내에서 찾는 문자열이 처음으로 나타나는 위치를 찾아서 해당 위치를 반환
- 찾는 문자열이 문자열 내에 존재하지 않으면 0을 반환
- MySQL에서는 문자열의 시작 인덱스를 1부터 계산
SELECT LOCATE('ABC','ABABABABAABCDFEQFSDFSDF');
LEFT, RIGHT
LEFT(): 문자열의 왼쪽부터 지정한 개수만큼의 문자를 반환
RIGHT(): 문자열의 오른쪽부터 지정한 개수만큼의 문자를 반환
SELECT LEFT('MySQL is an open source relational database management system', 5),
RIGHT('MySQL is an open source relational database management system', 6);
LOWER, UPPER
SELECT
LOWER('MySQL is an open source relational database management system'),
UPPER('MySQL is an open source relational database management system');
REPLACE
문자열에서 특정 문자열을 대체 문자열로 교체
SELECT REPLACE('MSSQL', 'MS', 'My');
TRIM
- 문자열의 앞이나 뒤, 또는 양쪽 모두에 있는 특정 문자를 제거
- TRIM() 함수에서 사용할 수 있는 지정자
- BOTH: 전달받은 문자열의 양 끝에 존재하는 특정 문자를 제거(기본 설정)
- LEADING: 전달받은 문자열 앞에 존재하는 특정 문자를 제거
- TRAILING: 전달받은 문자열 뒤에 존재하는 특정 문자를 제거
- 만약 지정자를 명시하지 않으면, 자동으로 BOTH 설정됨
- 또한, 제거할 문자를 명시하지 않으면, 자동으로 공백을 제거
SELECT TRIM(' ##MySQL## '),
TRIM(LEADING '#' FROM '##MySQL##'),
TRIM(TRAILING '#' FROM '##MySQL##');
FORMAT
- 숫자 타입의 데이터를 세 자리마다 쉼표(,)를 사용하는 '#,###,###.##'형식으로 변환
- 반환되는 데이터의 형식은 문자열 타입
- 두 번째 인수는 반올림할 소수 부분의 자릿수
SELECT FORMAT('123123123123.123123123',6);
FLOOR, CEIL, ROUND
- FLOOR() : 내림
- CEIL() : 올림
- ROUND() : 반올림
SELECT FLOOR(10.95), CEIL(10.95), ROUND(10.95);
SORT, POW, EXP, LOG
- SORT(): 양의 제곱근
- POW() : 첫 번째 인수로는 밑수를 전달하고, 두 번째 인수로는 지수를 전달하여 거듭제곱 계산
- EXP() : 인수로 지수를 전달받아, e의 거듭제곱을 계산
- LOG() : 자연로그 값을 계산
SELECT SQRT(4), POW(2,3), EXP(3), LOG(3);
SIN, COS, TAN
- SIN() : 사인 값 반환
- COS() : 코사인 값 반환
- TAN() : 탄젠트 값 반환
ABS, RAND
- ABS() : 절대값을 반환
- RAND() : 0.0보다 크거나 같고 1.0 보다 작은 하나의 실수를 무작위로 생성
- SQL에서는 RAND 범위를 지정할 수 없기 때문에 0에서 100사이의 값을 뽑아내고 싶으면 ROUND(RAND() * 100, 0); 즉, RAND에 100을 곱하고 소수자리를 다 떼버린 정수를 출력하겠다는 의미이다. 아래 코드 참고
SELECT ABS(-3), RAND() , ROUND(RAND()*100,0);
NOW, CURDATE, CURTIME
- NOW() : 현재 날짜와 시간을 반환, 반환되는 값은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 형태로 반환
- CURDATE() : 현재 날짜를 반환, 이때 반환되는 값은 'YYYY-MM-DD' 또는 YYYYMMDD 형태로 반환
- CURTIME() : 현재 시각을 반환, 이때 반환되는 값은 'HH:MM:SS' 또는 HHMMSS 형태로 반환
SELECT NOW(), CURDATE(), CURTIME()
DATE, MONTH, DAY, HOUR, MINUTE, SECOND
- DATE(): 전달받은 값에 해당하는 날짜 정보를 반환
- MONTH(): 월에 해당하는 값을 반환하며, 0 부터 12 사이의 값을 가짐
- DAY(): 일에 해당하는 값을 반환하며, 0 부터 31 사이의 값을 가짐
- HOUR(): 시간에 해당하는 값을 반환하며, 0 부터 23 사이의 값을 가짐
- MINUTE(): 분에 해당하는 값을 반환하며, 0 부터 59 사이의 값을 가짐
- SECOND(): 초에 해당하는 값을 반환하며, 0 부터 59 사이의 값을 가짐
SELECT
NOW(),
DATE(NOW()),
MONTH(NOW()),
DAY(NOW()),
HOUR(NOW()),
MINUTE(NOW()),
SECOND(NOW());
MONTHNAME, DAYNAME
- MONTHNAME(): 월에 해당하는 이름을 반환
- DAYNAME(): 요일에 해당하는 이름을 반환
SELECT
MONTHNAME('2021-04-28'),
DAYNAME('2021-04-28');
DAYOFWEEK, DAYOFMONTH, DAYOFYEAR
- DAYOFWEEK(): 일자가 해당 주에서 몇 번째 날인지를 반환, 1 부터 7 사이의 값을 반환 (일요일 = 1, 토요일 =7)
- DAYOFMONTH():일자가 해당 월에서 몇 번째 날인지를 반환, 0 부터 31 사이의 값을 반환
- DAYOFYEAR(): 일자가 해당 연도에서 몇 번째 날인지를 반환, 1 부터 366 사이의 값을 반환
SELECT
DAYOFMONTH('2021-04-28'),
DAYOFWEEK('2021-04-28'),
DAYOFYEAR('2021-04-28');
DATE_FORMAT
전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 반환
SELECT DATE_FORMAT('2021-04-28 23:01:30', '%D %y %a %d %m %b %j');
참고: dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
'DataBase > MySQL' 카테고리의 다른 글
[MySQL] MySQL 중급 (0) | 2021.04.29 |
---|---|
[MySQL] 기본 문법 (0) | 2021.04.28 |
[MySQL] MySQL 이란? (0) | 2021.04.28 |
[MySQL] MySQL 공부, 참고자료 사이트 (0) | 2021.04.28 |