문자열·숫자·날짜 함수와 조건 표현식으로 데이터를 가공한다.
함수와 연산
조회한 값을 그대로 쓰는 일은 드뭅니다. 이름을 합치고, 금액을 반올림하고, 날짜를 보기 좋게 포맷하고, NULL을 다른 값으로 바꾸는 가공이 늘 필요합니다. MySQL이 제공하는 내장 함수와 조건 표현식을 익혀 봅니다.
학습 목표
- 문자열 함수(
CONCAT,SUBSTRING,LENGTH)로 텍스트를 가공합니다. - 숫자 함수(
ROUND,CEIL,FLOOR)로 값을 다듬습니다. - 날짜 함수(
NOW,DATE_FORMAT,DATEDIFF)를 활용합니다. IFNULL과CASE WHEN으로 조건에 따라 값을 바꿉니다.
문자열 함수
-- 두 값을 이어 붙이기
SELECT CONCAT(name, '(', city, ')') AS 표기 FROM users;
-- 구분자로 합치기
SELECT CONCAT_WS(' ', last_name, first_name) AS 전체이름 FROM users;
-- 일부 잘라내기 (1부터 시작, 3글자)
SELECT SUBSTRING(phone, 1, 3) AS 국번 FROM users;
-- 길이, 대소문자, 공백 제거
SELECT LENGTH(name), UPPER(email), TRIM(name) FROM users;
-- 치환
SELECT REPLACE(phone, '-', '') AS 숫자만 FROM users;
💡 TIP — MySQL의 문자열 위치는 1부터 셉니다.
SUBSTRING('abcde', 2, 3)은'bcd'입니다.LENGTH는 바이트 길이라 한글에서는 글자 수와 다를 수 있으니, 글자 수가 필요하면CHAR_LENGTH를 쓰세요.
숫자 함수
SELECT
ROUND(price * 1.1, 0) AS 부가세포함, -- 소수 0자리 반올림
CEIL(price / 1000) AS 올림,
FLOOR(price / 1000) AS 내림,
MOD(id, 2) AS 나머지,
ABS(balance) AS 절댓값
FROM products;
ROUND(값, 자릿수) 는 지정한 소수 자리까지 반올림합니다. 자릿수를 생략하면 정수로 반올림합니다.
날짜와 시간 함수
-- 현재 시각 / 오늘 날짜
SELECT NOW(), CURDATE(), CURTIME();
-- 원하는 형식으로 포맷
SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i') AS 가입시각 FROM users;
-- 날짜 계산
SELECT DATE_ADD(created_at, INTERVAL 7 DAY) AS 일주일후 FROM users;
SELECT DATEDIFF(NOW(), created_at) AS 가입경과일 FROM users;
-- 부분 추출
SELECT YEAR(created_at), MONTH(created_at), DAY(created_at) FROM users;
DATE_FORMAT 의 주요 포맷 코드:
| 코드 | 의미 | 예 |
|---|---|---|
%Y | 4자리 연도 | 2026 |
%m | 2자리 월 | 06 |
%d | 2자리 일 | 05 |
%H | 24시간 시 | 14 |
%i | 분 | 30 |
NULL 처리 — IFNULL · COALESCE
-- phone이 NULL이면 '미등록'으로 대체
SELECT name, IFNULL(phone, '미등록') AS 연락처 FROM users;
-- 여러 후보 중 처음으로 NULL이 아닌 값
SELECT COALESCE(mobile, home_phone, '연락처 없음') AS 연락처 FROM users;
IFNULL(a, b) 는 a가 NULL이면 b를, 아니면 a를 돌려줍니다. COALESCE 는 인자가 여러 개일 때 유용합니다.
⚠️ 주의 —
NULL은 연산에 전파됩니다.point + NULL의 결과는 0이 아니라NULL입니다. 계산 전에IFNULL(point, 0)으로 감싸는 습관이 안전합니다.
조건 분기 — CASE WHEN
SELECT
name,
age,
CASE
WHEN age < 20 THEN '청소년'
WHEN age < 65 THEN '성인'
ELSE '경로'
END AS 연령대
FROM users;
CASE 는 위에서부터 조건을 평가해 처음 참이 되는 THEN 값을 반환합니다. 어느 것도 맞지 않으면 ELSE 값(없으면 NULL)을 돌려줍니다.
요약
- 문자열은
CONCAT,SUBSTRING,REPLACE등으로 가공하며 위치는 1부터 셉니다. - 숫자는
ROUND,CEIL,FLOOR로 다듬습니다. - 날짜는
NOW,DATE_FORMAT,DATE_ADD,DATEDIFF로 다룹니다. IFNULL/COALESCE로 NULL을 대체하고,CASE WHEN으로 값을 분기합니다.
연습문제
users의 이름과 도시를이름 - 도시형식의 한 열로 합쳐 출력하세요.products의price에 10% 부가세를 더한 값을 정수로 반올림해 보여 주세요.created_at을YYYY년 MM월형식 문자열로 출력하세요.age를 기준으로 20세 미만은 '미성년', 그 이상은 '성인'으로 표시하세요.
힌트 — 1번은
CONCAT, 2번은ROUND(price * 1.1, 0), 3번은DATE_FORMAT, 4번은CASE WHEN입니다.
💡 연습문제 풀이
불러오는 중…
댓글 0
“MySQL” 강좌에 대한 댓글입니다.