MySQL 내장함수
- 사용자의 편의를 위해 다양한 기능의 내장 함수를 미리 정의하여 제공
- 대표적인 내장 함수의 종류
문자열 함수, 수학 함수, 날짜와 시간 함수
- 실습은 특정 숫자나 문자를 넣었지만, 분석을 할때는 해당 자리에 본인이 알고자 하는 컬럼들을 넣음
SELECT LENGTH(Name)
FROM city;
LENGTH()
- 전달받은 문자열의 길이를 반환
SELECT LENGTH('123456789');
CONCAT()
- 전달받은 문자열을 모두 결합하여 하나의 문자열로 반환
- 전달받은 문자열 중 하나라도 NULL이 존재하면 NULL을 반환
SELECT CONCAT('My', 'sql Op', 'en Source');
LOCATE()
- SELECT LOCATE(substr, str, [pos]);
- 문자열 내에서 찾는 문자열이 처음으로 나타나는 위치를 찾아서 해당 위치를 반환
- 찾는 문자열이 문자열 내에 존재하지 않으면 0을 반환
- python과 달리 MySQL에서는 문자열의 시작 인덱스를 1부터 계산(python은 인덱스를 매길 때 0부터 시작하지만, MySQL은 1부터 시작)
- pos는 선택적으로 넣을수 있는 값인데, 해당 인자에 값을 주게 되면 해당 인자의 위치에서 부터 검색을 시작
SELECT LOCATE('abc', 'abababcbacdABCDabcAB');
>> 5
SELECT LOCATE('abc', 'abababcbacdABCDabcAB', 7);
>> 12
# 소문자와 대문자 구분없는듯
LEFT(), RIGHT()
- LEFT(): 문자열의 왼쪽부터 지정한 개수만큼의 문자를 반환
- RIGHT(): 문자열의 오른쪽부터 지정한 개수만큼의 문자를 반환
SELECT LEFT('MySQL is database management system', 5);
>> MySQL
SELECT RIGHT('MySQL is database management system', 6);
>> system
LOWER(), UPPER()
- LOWER(): 문자열의 문자를 모두 소문자로 변경
- UPPER(): 문자열의 문자를 모두 대문자로 변경
SELECT LOWER('MySQL is database management system');
>> mysql is database management system
SELECT UPPER('MySQL is database management system');
>> MYSQL IS DATABASE MANAGEMENT SYSTEM
REPLACE()
- 문자열에서 특정 문자열을 대체 문자열로 교체
SELECT REPLACE('MSSQL', 'MS', 'My');
>> MySQL
TRIM()
- 문자열의 앞이나 뒤, 또는 양쪽 모두에 있는 특정 문자를 제거
- TRIM() 함수에서 사용할 수 있는 지정자
BOTH: 전달받은 문자열의 양 끝에 존재하는 특정 문자를 제거(기본 설정)
LEADING: 전달받은 문자열 앞에 존재하는 특정 문자를 제거
TRAILING: 전달받은 문자열 뒤에 존재하는 특정 문자를 제거
- 제거할 문자를 명시하지 않으면, 자동으로 공백을 제거
SELECT TRIM(' MySQL '),
TRIM(LEADING '#' FROM '###MySQL##'),
TRIM(TRAILING '#' FROM '###MySQL##');
>> MySQL, MySQL##, ###MySQL
FORMAT()
- 숫자 타입의 데이터를 세 자리마다 쉼표(,)를 사용하는 '#,###,###.##' 형식으로 변환
- 반환되는 데이터의 형식은 문자열 타입
- 두 번째 인수는 반올림할 소수 부분의 자릿수
SELECT FORMAT(123123123123.123123123, 4);
>> 123,123,123,123.1231
FLOOR(), CEIL(), ROUND()
- FLOOR(): 내림
- CEIL(): 올림
- ROUND(): 반올림(반올림 기준 정할수 있음: 지정하지 않을 경우 소수점 첫번째 자리를 사용, '소수점 몇번째 자리까지 나타냄 → 지정한 자리수 뒤에 숫자를 보고 반올림 처리')
SELECT FLOOR(21.35);
>> 21
SELECT CEIL(21.35);
>> 22
SELECT ROUND(10.349);
>> 10
SELECT ROUND(10.349, 1);
>> 10.3
SQRT(), POW(), EXP(), LOG()
- SQRT(): 양의 제곱근
- POW(): 첫 번째 인수로는 밑수를 전달하고, 두 번째 인수로는 지수를 전달하여 거듭제곱 계산
- EXP(): 인수로 지수를 전달받아, e의 거듭제곱을 계산
- LOG(): 자연로그 값을 계산
SELECT SQRT(4), POW(2,3), EXP(3), LOG(3);

SIN(), COS(), TAN()
- SIN(): 사인값 반환
- COS(): 코사인값 반환
- TAN(): 탄젠트값 반환
SELECT SIN(PI()/2), COS(PI()), TAN(PI()/4);
>> 1, -1, 0.99999999999999
ABS(), RAND()
- ABS(): 절대값을 반환
- RAND(): 0.0보다 크거나 같고 1.0보다 작은 하나의 실수를 무작위로 생성(매 실행마다 달라짐)
- RAND(시드번호): 시드번호를 부여하면 매 실행마다 동일한 결과
SELECT ABS(-3), RAND(1), ROUND(RAND(1)*100, 0);
>> 3, 40.54035371219772, 41
NOW(), CURDATE(), CURTIME()
- NOW(): 현재 날짜와 시간을 반환, 반환되는 값은 'YYYY-MM-DD HH:MM:SS' 또는 YYYYMMDDHHMMSS 형태로 반환
- CURDATE(): 현재 날짜를 반환, 이때 반환되는 값은 'YYYY-MM-DD' 또는 YYYYMMDD 형태로 반환
- CURTIME(): 현재 시각을 반환, 이때 반환되는 값은 'HH:MM:SS' 또는 HHMMSS 형태로 반환
SELECT NOW();
SELECT CURDATE();
SELECT CURTIME();
DATE(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND()
- DATE(): 전달받은 값에 해당하는 날짜 정보를 반환
- MONTH(): 월에 해당하는 값을 반환하며, 0부터 12 사이의 값을 가짐
- DAY(): 일에 해당하는 값을 반환하며, 0부터 31 사이의 값을 가짐
- HOUR(): 시간에 해당하는 값을 반환하며, 0부터 23 사이의 값을 가짐
- MINUTE(): 분에 해당하는 값을 반환하며, 0부터 59 사이의 값을 가짐
- SECONDE(): 초에 해당하는 값을 반환하며, 0부터 59 사이의 값을 가짐
SELECT
NOW(),
DATE(NOW()),
MONTH(NOW()),
DAY(NOW()),
HOUR(NOW()),
MINUTE(NOW()),
SECOND(NOW());
MONTHNAME(), DAYNAME()
- MONTHNAME(): 월에 해당하는 이름을 반환
- DAYNAME(): 요일에 해당하는 이름을 반환
SELECT
NOW(),
MONTHNAME(NOW()),
DAYNAME(NOW());
DAYOFWEEK(), DAYOFMONTH(), DAYOFYEAR()
- DAYOFWEEK(): 일자가 해당 주에서 몇 번째 날인지를 반환, 1부터 7 사이의 값을 반환(일요일=1, 토요일=7)
요일에 해당하는 정수를 반환
- DAYOFMONTH(): 일자가 해당 월에서 몇 번째 날인지를 반환, 0부터 31 사이의 값을 반환
- DAYOFYEAR(): 일자가 해당 연도에서 몇 번째 날인지를 반환, 1부터 366사이의 값을 반환
SELECT
DAYOFMONTH('2023-05-01'),
DAYOFWEEK('2023-05-01'),
DAYOFYEAR('2023-05-01');
DATE_FORMAT()
- DATE_FORMAT(날짜 , 형식)
- 전달받은 형식에 맞춰 날짜와 시간 정보를 문자열로 반환(날짜를 지정한 형식으로 출력)

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
>> 2023-05-20
- https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
Reference)
유튜브 '이수안컴퓨터연구소 MySQL 데이터베이스 한번에 끝내기'
'SQL' 카테고리의 다른 글
| MySQL(3) (0) | 2023.05.21 |
|---|---|
| MySQL(1) (0) | 2023.05.18 |
| DDL, DML, DCL (0) | 2023.05.18 |