dev.syw

문자열·숫자·날짜 함수와 조건 표현식으로 데이터를 가공한다.

함수와 연산

조회한 값을 그대로 쓰는 일은 드뭅니다. 이름을 합치고, 금액을 반올림하고, 날짜를 보기 좋게 포맷하고, NULL을 다른 값으로 바꾸는 가공이 늘 필요합니다. MySQL이 제공하는 내장 함수와 조건 표현식을 익혀 봅니다.

학습 목표

  • 문자열 함수(CONCAT, SUBSTRING, LENGTH)로 텍스트를 가공합니다.
  • 숫자 함수(ROUND, CEIL, FLOOR)로 값을 다듬습니다.
  • 날짜 함수(NOW, DATE_FORMAT, DATEDIFF)를 활용합니다.
  • IFNULLCASE 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 의 주요 포맷 코드:

코드의미
%Y4자리 연도2026
%m2자리 월06
%d2자리 일05
%H24시간 시14
%i30

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 으로 값을 분기합니다.

연습문제

  1. users 의 이름과 도시를 이름 - 도시 형식의 한 열로 합쳐 출력하세요.
  2. productsprice 에 10% 부가세를 더한 값을 정수로 반올림해 보여 주세요.
  3. created_atYYYY년 MM월 형식 문자열로 출력하세요.
  4. age 를 기준으로 20세 미만은 '미성년', 그 이상은 '성인'으로 표시하세요.

힌트 — 1번은 CONCAT, 2번은 ROUND(price * 1.1, 0), 3번은 DATE_FORMAT, 4번은 CASE WHEN 입니다.

💡 연습문제 풀이

불러오는 중…

함께 보면 좋은 자료

댓글 0

MySQL” 강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.