데이터베이스 내장함수 활용 완전정복 🚀
SQL 문법만 아신다고요?
진짜 실무는 내장함수로 승부 납니다!
데이터 가공의 핵심 무기, 이제부터 제대로 알아봅시다!
안녕하세요! 😊
오늘은 SQL을 조금 더 실용적이고 똑똑하게 다루기 위해 꼭 알아야 할 데이터베이스 내장함수에 대해 이야기해볼까 해요.
단순한 SELECT, INSERT에서 머무르던 시절은 이제 안녕~ 문자열을 다듬고, 날짜를 변환하고, 숫자를 정리하는 실전 기술들을 함께 배워볼 거예요.
특히나 초보자분들도 이해할 수 있도록 예제 중심으로 준비했으니 끝까지 따라오시면 어느새 데이터 마법사가 되어 있을지도 모릅니다✨
자, 그럼 지금부터 출발해볼까요?
목차
1. 단일행 내장 함수란? 🧩
SQL에서 단일행 내장 함수란, 하나의 행에 대해 하나의 결과값을 반환하는 함수들을 말합니다.
즉, 테이블의 각 행마다 각각 계산을 수행하고 결과를 돌려주는 함수들이죠.
복잡한 계산, 문자열 처리, 날짜 포맷 변경 등 일일이 수동으로 처리하려면 머리 아픈 작업들을 이 함수들이 척척 대신 처리해줍니다.
단일행 함수는 아래와 같이 크게 네 가지로 나눌 수 있어요:
- 문자열 함수: 텍스트 다듬기, 길이 계산, 문자열 결합 등
- 숫자 함수: 반올림, 절댓값 계산, 올림/내림 처리 등
- 날짜/시간 함수: 현재 시각 불러오기, 날짜 더하기/빼기, 포맷 변경 등
- 변환 함수: 데이터 타입 변환, NULL 처리 등
📌 실무에서 단일행 함수가 중요한 이유
실제 업무에서 데이터를 직접 눈으로 보고 수정하거나 정제하는 건 너무 비효율적이죠.
예를 들어
이름 뒤에 불필요한 공백이 있다거나, 날짜 형식이 들쭉날쭉하거나, 가격이 정수로 처리돼야 할 때...
이럴 때 단일행 함수 하나면 수천, 수만 건의 데이터를 한 번에 처리할 수 있어요!
🛠️ 대표 예시: UPPER(), LOWER(), LENGTH()
함수 | 설명 | 예시 |
---|---|---|
UPPER() |
문자를 모두 대문자로 변환 | UPPER('hello') → 'HELLO' |
LOWER() |
문자를 모두 소문자로 변환 | LOWER('HELLO') → 'hello' |
LENGTH() |
문자열의 길이를 반환 | LENGTH('hello') → 5 |
앞으로 각 유형별로 더 디테일하게 들어갈 테니까, 지금은 전체 그림만 이해하시면 돼요!
다음 섹션에서는 가장 많이 쓰이는 문자열 함수들을 하나하나 파헤쳐보겠습니다.
2. 문자열 함수 정복하기 (CONCAT, LENGTH 등) 🔡
문자열 함수는 텍스트 데이터를 다루는 데 필수예요.
고객 이름을 조합하거나, 불필요한 공백을 제거하고, 특정 위치의 글자만 뽑아내는 작업은 거의 매일 한다고 봐야 합니다.
이번 장에서는 실무에서 가장 많이 쓰는 네 가지 함수,
CONCAT
, LENGTH
, SUBSTRING
, REPLACE
를 예제로 설명드릴게요.
🔗 CONCAT(): 문자열 결합
CONCAT()
함수는 두 개 이상의 문자열을 붙여주는 역할을 합니다.
예를 들어,
성과 이름이 따로 저장되어 있다면 이걸 하나의 전체 이름으로 만드는 데 유용하죠.
예시 | 결과 |
---|---|
CONCAT('김', '민수') | 김민수 |
CONCAT(이름, '(', 직책, ')') | 홍길동(과장) |
🔢 LENGTH(): 문자열 길이
LENGTH()
함수는 문자열이 몇 자로 구성되어 있는지 알려줘요.
고객 ID가 너무 짧거나 너무 길 경우를 필터링하는 데 유용합니다.
-
LENGTH('hello') → 5
-
LENGTH('데이터') → 9
(UTF-8 환경에서는 한글 1글자가 3바이트로 처리됨)
✂️ SUBSTRING(): 문자열 일부 추출
SUBSTRING()
함수는 문자열에서 특정 위치의 일부만 잘라낼 때 사용돼요.
주민등록번호에서 생년월일만 뽑는다거나, 전화번호 뒷자리만 보는 경우 아주 유용합니다.
예시 | 결과 |
---|---|
SUBSTRING('20250406', 1, 4) | 2025 |
SUBSTRING('홍길동과장', 1, 3) | 홍길동 |
🔁 REPLACE(): 특정 문자 교체
REPLACE()
는 문자열 안에서 특정 단어를 다른 단어로 바꿔주는 함수입니다.
광고 문자에서 "[광고]"를 없앤다거나, 전화번호 형식에서 '-'를 제거할 때 자주 써요.
-
REPLACE('010-1234-5678', '-', '') → 01012345678
-
REPLACE('[광고]특가상품!', '[광고]', '') → 특가상품!
이처럼 문자열 함수만 잘 활용해도 데이터 가공의 절반은 끝난 셈이에요.
다음 섹션에서는 또 하나의 실무 핵심, 날짜/시간 함수에 대해 살펴볼게요.
출생년도, 가입일, 오늘 기준으로 몇 일 지났는지… 날짜 다루는 게 은근히 어렵거든요!
3. 날짜와 시간 함수 완전 분석 (NOW, DATE_ADD 등) 📆
날짜/시간 함수는 실무에서 진짜 많이 쓰여요.
회원 가입일, 주문일, 배송 예정일, 생년월일… 이 모든 데이터가 ‘날짜’ 형태로 저장되잖아요?
단순히 저장만 해선 의미가 없고,
가공해서 '오늘 기준 몇 일 지났는지',
'이번 달에 가입한 사람은 몇 명인지' 같은 정보를 뽑아내야 쓸모가 생깁니다.
오늘은 NOW()
, DATE_FORMAT()
, DATE_ADD()
같은 꿀 함수들을 함께 살펴볼게요 🔍
⏰ NOW(): 현재 날짜와 시간
NOW()
는 지금 이 순간의 날짜와 시간을 반환하는 함수입니다.
서버 시간 기준이기 때문에 실시간 로깅이나 가입일 자동 기록 등에 자주 사용돼요.
SQL 예시 | 결과 예시 |
---|---|
SELECT NOW(); | 2025-04-06 22:32:18 |
📅 DATE_FORMAT(): 날짜 포맷 변경
날짜는 DB 안에서 보관할 땐 괜찮지만, 그대로 사용자에게 보여주기엔 좀 불친절하죠?DATE_FORMAT()
함수는 YYYY년 MM월 DD일 같은 친절한 형식으로 바꿔주는 데 유용해요.
예시 | 설명 |
---|---|
DATE_FORMAT(NOW(), '%Y-%m-%d') | ‘2025-04-06’ 형식으로 출력 |
DATE_FORMAT(NOW(), '%Y년 %m월 %d일') | ‘2025년 04월 06일’로 출력 |
➕ DATE_ADD(): 날짜 계산
예:
“가입일로부터 30일 후”를 알고 싶을 때 유용한 함수가 바로 DATE_ADD()
입니다.
날짜에 일(day), 월(month), 연(year) 등을 더하거나 뺄 수 있어요.
-
DATE_ADD('2025-04-01', INTERVAL 7 DAY)
→ 2025-04-08 -
DATE_ADD(NOW(), INTERVAL 1 MONTH)
→ 다음 달 오늘
🧠 정리 팁
-
NOW()
→ 현재 시간 얻기 -
DATE_FORMAT()
→ 사용자에게 보여줄 날짜 형식으로 변환 -
DATE_ADD()
→ 특정 날짜에 일/월/년 더하기
다음 섹션에서는 계산의 핵심, 숫자 함수로 넘어가 볼게요.
가격 반올림, 절댓값, 올림·내림 처리까지... 실수형 숫자 다루는 방법을 정리해드립니다 💡
4. 숫자 함수 제대로 쓰기 (ROUND, CEIL, ABS 등) 🔢
숫자 데이터를 다룰 때 가장 많이 하는 실수?
바로 반올림 또는 절삭을 제대로 못 하는 거예요.
예를 들어,
할인율 계산 후 소수점 몇 자리까지 보여줄지, 총액을 올림해서 결제 처리할지…
이런 게 바로 실전 문제죠.
여기서는 대표적인 숫자 처리 함수인 ROUND()
, CEIL()
, FLOOR()
, ABS()
를 소개할게요!
🔘 ROUND(): 반올림
ROUND()
는 특정 소수점 자리까지 반올림하는 함수입니다.
계산 결과를 보기 좋게 정리할 때 사용되죠.
SQL | 결과 |
---|---|
ROUND(3.14159, 2) | 3.14 |
ROUND(99.999) | 100 |
🔼 CEIL(): 올림
CEIL()
함수는 소수점을 무조건 올림해서 정수로 만들어줍니다.
예:
택배비, 결제 금액 등 반올림보다 올림이 필요한 상황에서 사용!
-
CEIL(5.2) → 6
🔽 FLOOR(): 내림
FLOOR()
는 무조건 내림하는 함수예요.
할인 계산에서 고객에게 유리하게 금액을 조정할 때 종종 사용됩니다.
-
FLOOR(5.9) → 5
➖ ABS(): 절댓값
ABS()
함수는 음수를 양수로 바꾸는 절댓값 계산용입니다.
실수 계산에서 마이너스 값만 제거할 때 편리하죠.
-
ABS(-100) → 100
🎯 언제 어떤 숫자 함수를 써야 할까?
상황 | 추천 함수 |
---|---|
소수 둘째 자리까지 보여줄 때 | ROUND() |
결제 금액 올림 처리 | CEIL() |
할인 금액 내림 계산 | FLOOR() |
손실 수치를 양수로 정리 | ABS() |
숫자 함수를 제대로 알면 데이터 품질이 달라지고, 고객에게 보여주는 정보도 훨씬 깔끔해져요.
이제 다음 섹션에서 이 모든 함수들을 활용한 실전 예제를 함께 풀어보겠습니다! 💪
5. 실전 예제: 생년월일 가공, 상품 정보 조합 💡
지금까지 배운 문자열 함수, 날짜 함수, 숫자 함수들을 실전에 어떻게 활용할 수 있을까요?
이제는 그냥 이론만 보지 말고 직접 쿼리를 작성해 보면서 감을 잡아야 합니다.
그래서 준비한 2가지 시나리오! 😎
🧓 회원 테이블에서 생년월일 가공하기
가상의 members
테이블에 다음과 같은 데이터가 있다고 가정해봅시다.
id | name | birth_date |
---|---|---|
1 | 김민수 | 1994-03-21 |
2 | 이수지 | 1987-07-08 |
우리는 여기서 두 가지 작업을 할 거예요:
- 생년월일을 'YYYY년 MM월 DD일' 형식으로 변환
- 오늘 기준 나이 계산
아래 쿼리를 보세요:
SELECT
name,
DATE_FORMAT(birth_date, '%Y년 %m월 %d일') AS formatted_birth,
YEAR(CURDATE()) - YEAR(birth_date) AS age
FROM
members;
단 두 줄의 함수로 날짜 형식도 바꾸고 나이도 계산했죠?
이게 바로 SQL 내장함수의 파워입니다! 💪
🛍️ 상품명 + 가격 문자열 만들기
이번엔 products
테이블에서 상품명과 가격을 한 줄로 묶어서 출력해보겠습니다.
고객에게 ‘상품명 (가격원)’ 형태로 보여주기 위한 가공이죠!
SELECT
CONCAT(product_name, ' (', FORMAT(price, 0), '원)') AS product_info
FROM
products;
CONCAT
과 FORMAT
조합만으로 상품 정보가 확! 깔끔해지죠?
실무에서 이런 식으로 텍스트 조합은 진짜 많이 씁니다!
✅ 실전 포인트 요약
-
DATE_FORMAT()
으로 날짜 가독성 향상 -
YEAR(CURDATE()) - YEAR(생년)
방식으로 간단한 나이 계산 -
CONCAT()
+FORMAT()
으로 상품 정보 포맷화
이제 내장함수들이 실무에서 얼마나 강력한 무기인지 실감나시죠?
6. 마무리 요약 및 실무 적용 팁 🎯
여기까지 따라오셨다면 이제 SQL 내장 함수에 대한 기본기를 완벽히 다지셨다고 자신 있게 말씀드릴 수 있어요!
단순히 SELECT만 쓰던 시절을 지나, 이제는 문자열·숫자·날짜 데이터를 자유롭게 가공할 수 있는 실력을 갖추게 된 거죠.
📌 핵심 요약 정리
- 문자열 함수:
CONCAT
,LENGTH
,SUBSTRING
,REPLACE
- 날짜 함수:
NOW
,DATE_FORMAT
,DATE_ADD
- 숫자 함수:
ROUND
,CEIL
,FLOOR
,ABS
💼 실무 적용 팁
- 보고서 출력용 데이터 만들 땐
CONCAT()
+FORMAT()
조합이 최고! - 날짜 조건 검색 시
NOW()
와DATE_ADD()
를 조합해 범위 지정 - 숫자 계산 후 소수점 자리 제어 시
ROUND()
,CEIL()
,FLOOR()
필수!
이 글을 통해 여러분이 데이터베이스 내장 함수를 자유자재로 활용할 수 있게 되었다면,
그보다 더 뿌듯할 수 없겠네요 😊
'Database' 카테고리의 다른 글
트랜잭션과 데이터 일관성: 데이터베이스의 핵심을 잡다 (0) | 2025.04.09 |
---|---|
VIEW와 INDEX의 이해와 활용법 총정리 (0) | 2025.04.09 |
HAVING 절과 조건부 집계: 집계함수를 한 단계 더 활용하는 방법 (0) | 2025.04.09 |
GROUP BY와 집계함수로 배우는 데이터 분석의 첫걸음 (0) | 2025.04.08 |
서브쿼리(Subquery)의 모든 것: 복잡한 데이터도 쉽게 다루는 SQL 비법 (2) | 2025.04.08 |