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

+ Recent posts