데이터 분석을 위한 SQL 입문
✔️ 숫자 계산 함수
✔️ 문자열 처리 함수
✔️ 날짜 및 시간 함수
✔️ 숫자 계산 함수
절대값
ABS()
음수든 양수든 절대값을 반환
-- 절대값 : ABS()
select abs(-34), abs(1), abs(-256);
-- 결과: 34, 1, 256
반올림
ROUND(값, 소수점 자리)
지정한 소수점 자리로 반올림
-- 반올림 함수 : ROUND(값, 소수점 자리)
select round(3.14567, 2);
-- 결과: 3.15
올림
CEIL()
소수점 아래를 무조건 올림
-- 올림 함수 : CEIL()
select ceil(4.1);
-- 결과: 5
내림
FLOOR()
소수점 아래를 버림
-- 내림 함수 : FLOOR()
select floor(4.999);
-- 결과: 4
기본 연산
/, *, +, -, %, DIV, MOD
나누기, 곱하기, 더하기, 빼기, 나머지 등을 계산
-- 연산자를 통한 계산 : /, *, +, -, %
-- % : 나머지, div : 몫, mod : 나머지
select 7/2;
select 7*2;
select 7+2;
select 7-2;
select 7%2;
select 7 div 2;
select 7 mod 2;
-- 결과: 3.5, 14, 9, 5, 1, 3, 1
제곱과 루트(제곱근)
POWER() : 제곱
SQRT() : 루트(제곱근)
제곱과 제곱근을 구함
-- 제곱, 제곱근 확인
select power(4, 3);
select sqrt(3);
-- 결과: 64, 1.732...
음수/양수 확인
SIGN()
양수는 1, 음수는 -1, 0은 0을 반환
-- 음수/양수 확인
select sign(5), sign(-78);
-- 결과: 1, -1
버림
TRUNCATE(값, 자릿수)
지정한 자릿수에서 잘라냄(반올림 없이)
-- truncate(값, 자릿수) : 버림
-- 반올림과 비교
select round(2.2345, 3), truncate(2.2345, 3);
-- 결과: 2.235, 2.234
select round(1153.2345, -2), truncate(1153.2345, -2);
-- 결과: 1200, 1100
✔️ 문자열 처리 함수
문자열 길이
LENGTH(), CHAR_LENGTH()
LENGTH()는 바이트 수, CHAR_LENGTH()는 문자 수 확인
(한글은 1자가 3바이트)
-- 문자열 길이 측정 : LENGTH(문자열)
-- 공백도 문자 1개로 취급
select length('my sql');
-- 결과: 6
-- 문자열 함수 : char_length()
-- 문자의 길이를 알아보는 함수
-- 한글은 한글자가 3개의 memory 차지 -> 홍길동(9)
select char_length('my sql'), length('my sql');
-- 결과: 6, 6
select char_length('홍길동'), length('홍길동');
-- 결과: 9, 3
문자열 연결
CONCAT(), CONCAT_WS()
CONCAT()은 그냥 붙이고, CONCAT_WS()는 구분자를 넣어 붙임
-- 문자를 연결하는 함수 : concat(), concat_ws()
-- 문장을 합치는 가운데 단어 앞뒤로 공백을 넣으면 공백이 표시
select concat('this',' is ','mysql') as concat1;
-- 결과: this is mysql
select concat('this', null, 'mysql') as concat1;
-- 결과: NULL (NULL 포함 시 전체가 NULL)
select concat_ws(':', 'this', 'is', 'mysql') as concat2;
-- 결과: this:is:mysql
대소문자 변환
LOWER() : 대문자 -> 소문자
UPPER() : 소문자 -> 대문자
-- 대문자를 소문자로 lower()
-- 소문자를 대문자로 upper()
select lower('ABCD');
-- 결과: abcd
select upper('efgh');
-- -- 결과: EFGH
패딩
LPAD(), RPAD()
지정한 길이로 늘리고 빈 공간을 문자로 채움
-- 문자열 자릿수를 일정하게 하고 빈 공간을 지정한 문자로 채우는 함수
-- lpad(값, 자릿수, 채울문자), rpad(값, 자릿수, 채울문자)
select lpad('sql', 7, '#'), rpad('sql', 7, '#');
-- 결과: ####sql, sql####
select lpad('sql', 7, '='), rpad('sql', 7, '=');
-- 결과: ====sql, sql====
공백 제거
LTRIM(), RTRIM(), TRIM()
앞, 뒤, 또는 양쪽 공백을 제거
-- 공백을 없애는 함수 : ltrim(문자열), rtrim(문자열)
-- trim() : 문자열의 공백을 앞뒤로 삭제
select ltrim(' sql '), rtirm(' sql '), trim(' sql ');
-- 결과: 'sql ', ' sql', 'sql'
select trim(' my sql ');
-- 결과: 'my sql' (중간 공백은 유지)
문자열 자르기
LEFT(), RIGHT(), SUBSTR()
문자열의 왼쪽, 오른쪽, 또는 중간을 잘라냄
-- 문자열을 잘래내는 함수 left(문자열, 길이), right(문자열, 길이)
select left('this is my sql', 5), right('this is my sql', 5);
-- 결과: this , my sql
-- 문자열을 중간에서 잘라내는 함수 substr(문자열, 시작위치, 길이)
select substr('this is my sql', 6, 5);
-- 결과: is my
특정 문자 제거
TRIM(LEADING/TRAILING/BOTH)
공백뿐 아니라 지정한 문자도 제거 가능
-- 문자열 공백을 앞뒤로 삭제하고 문자열 앞뒤에 포함된 특정 문자도 삭제하는 함수
-- trim(leading '삭제할 문자' from, 전체 문자열) : 문자열 중 앞부분에 삭제할 문자 제거
-- tirm(trailing '삭제할 문자' from 전체 문자열) : 문자열 중 뒷부분에 삭제할 문자 제거
-- tirm(both '삭제할 문자' from 전체 문자열) : 문자열 전부에서 삭제할 문자 제거
select trim(' my sql ');
-- 결과: 'my sql'
select trim(leading '*' from '****my sql****');
-- 결과: 'my sql****'
select trim(trailing '*' from '****my sql****');
-- 결과: '****my sql'
select trim(both '*' from '****my sql****');
-- 결과: 'my sql'
✔️ 날짜 및 시간 함수
현재 날짜/시간
CURDATE() : 현재 년도-월-일
CURTIME() : 현재 시:분:초
NOW() : 현재 년도-월-일 + 시:분:초
CURRENT_TIMESTAMP() : 현재 년도-월-일 + 시:분:초
-- 날짜형 함수
select curdate(), curtime(); -- 햔재 년월일 / 현재 시간
-- 결과: 2025-02-27, 14:30:00
select now(); -- 현재 년월일 + 현재 시간
-- 결과: 2025-02-27 14:30:00
select current_timestamp(); -- 현재 년월일 + 현재 시간
-- 결과: 2025-02-27 14:30:00
요일 확인
DAYNAME(), DAYOFWEEK()
요일을 영어 이름이나 숫자로 표시
일(1), 월(2), 화(3), 수(4), 목(5), 금(6), 토(7)
-- 영문 요일 표시 함수 dayname(날짜)
select dayname(now());
-- 결과: Thursday, 5
select dayname('2025-01-01');
-- 결과: Wednesday
-- 요일을 번호로 표시
-- dayofweek(날짜) : 일(1), 월(2), 화(3), 수(4), 목(5), 금(6), 토(7)
select dayofweek(now());
-- 결과: 5
select dayofweek('2025-05-05');
-- 결과: 4
연중 날짜
DAYOFYEAR()
1년 중 몇 번째 날인지 확인
-- 1년 중 몇 번째 날인지 dayofyear()
select dayofyear(now());
-- 결과: 58
select dayofyear('2025-05-08');
-- 결과: 128
날짜 세분화
YEAR() : 년도 기준
MONTH() : 월 기준
DAY() : 일 기준
QUARTER() : 분기 기준
WEEKOFYEAR() : 주차 기준
날짜를 연도, 월, 일, 분기, 주차로 나눌 수 있음
-- 날짜를 세분화 하여 보는 함수들
-- 입력한 날자에서 연도, 월, 일만 출력
select year(now()), month(now()), day(now());
-- 결과: 2025, 2, 27
-- 몇 분기인지 출력
select quarter('2025-12-13');
-- 결과: 4
-- 몇 주차인지 출력
select weekofyear('2025-12-13');
-- 결과: 50
-- 영문으로 월을 표시
select monthname('2025-10-01');
-- 결과: October
마지막 날
LAST_DAY()
해당 달의 마지막 날짜를 반환
-- 현재 달의 마지막 날이 몇 일까지 있는지 출력
select last_day(now()), last_day('2025-05-08');
-- 결과: 2025-02-28, 2025-05-31
날짜와 시간 분리
DATE(), TIME()
날짜와 시간 추출
-- 날짜와 시간이 같이 있는 데이터에서 날짜와 시간을 구분해주는 함수
select now();
-- 결과: 2025-02-27 14:30:00
select date(now());
-- 결과: 2025-02-27
select time(now());
-- 결과: 14:30:00
날짜 더하기/빼기
DATE_ADD(), SUBDATE()
날짜에 일수를 더하거나 빼기 가능
-- 날짜를 지정한 날 수 만큼 더하는 date_add(날짜, interval 더할 날 수 day)
select date_add(now() , interval 5 day), adddate(now() , 5);
-- 결과: 2025-03-04 14:30:00, 2025-03-04 14:30:00
-- 날짜를 지정한 날 수만큼 빼는 함수
-- subdate(날짜, interval 뺄 날 수 day)
select subdate(now(), interval 5 day), select subdate(now(), 5);
-- 결과: 2025-03-04 14:30:00, 2025-02-22 14:30:00
날짜 단위 추출
EXTRACT()
연월, 일시, 분초 등을 추출
-- 날짜와 시간을 년월, 날 시간, 분초 단위로 추출하는 함수
-- extract(옵션, from 날짜시간)
select extract(year_month from now());
-- 결과: 202502
select extract(day_hour from now());
-- 결과: 2714
날짜 차이
DATEDIFF()
두 날짜 간 일수 차이를 계산
-- 날짜 1에서 날짜 2를 뺀 일수 계산
-- datediff(날짜1, 날짜2)
select datediff(now(), '2024-12-25');
-- 결과: 64
날짜 포맷
DATE_FORMAT()
원하는 형식으로 날짜와 시간을 표시
-- 날짜 포멧 함수 -> 지정한 형식에 맞춰 출력해주는 함수
-- %Y : 4자리 연도, %y : 2자리 연도
-- %M : 월의 영문표기, %m : 2자리 월 표시, %b : 월의 축약 영문표기
-- %d : 2자리 일 표시, %e : 1자리 일 표시
-- 시간 표시
-- %H : 24시간, %h : 12시간, %p : AM, PM 표시
-- %i : 2자리 분 표시
-- %S : 2자리 초 표시
-- %T : 24시간 표기법 시:분:초
-- %r : 12시간 표기법 시:분:초 AM/PM
-- %W : 요일의 영문표기, %w : 숫자로 요일 표시
-- 일(1), 월(2), 화(3), 수(4), 목(5), 금(6), 토(7)
select date_format(now(), '%Y-%m-%d'), date_format(now(), '%d-%M-%y');
-- 결과: 2025-02-27, 27-February-25
select date_format('2025-01-01', '%e-%b-%Y');
-- 결과: 1-Jan-2025
select date_format(now(), '%H-%i-%S'), date_format(now(), '%r');
-- 결과: 14-30-00, 02:30:00 PM
데이터 분석을 위한 SQL 입문_4
숫자 계산 함수, 문자열 함수, 날짜 및 시간 함수에 대해 알아보았습니다.
자세한 내용은 혼자 공부하는 SQL 블로그 글도 참고해주시기 바랍니다.
'혼공시리즈/혼공S_혼자 공부하는 SQL' 카테고리의 글 목록
데이터 분석 공부 열심히 하는 중😁
everyonelove.tistory.com
'BOOTCAMP > SQL(MySQL)' 카테고리의 다른 글
[SQL입문] MySQL_뷰(VIEW)와 MySQL 권한 부여, 실습 문제 풀이 (0) | 2025.03.02 |
---|---|
[SQL입문] MySQL_ERD 다이어그램 생성과 DB 백업 및 불러오기 (1) | 2025.02.28 |
[SQL입문] MySQL_제약조건 있는 테이블 활용 및 ROLLBACK 실습 (2) | 2025.02.27 |
[SQL입문] MySQL_MySQL 설치부터 SQL 구문 작성까지 (0) | 2025.02.26 |