📌 1. 문자열(String) 함수
| 함수 | 설명 | 예제 |
|---|
LENGTH(str) | 바이트(byte) 길이 반환 | SELECT LENGTH('한글'); -- 6 (UTF-8 기준) |
CHAR_LENGTH(str) | 문자(character) 개수 반환 | SELECT CHAR_LENGTH('한글'); -- 2 |
UPPER(str) | 대문자로 변환 | SELECT UPPER('hello'); -- 'HELLO' |
LOWER(str) | 소문자로 변환 | SELECT LOWER('HELLO'); -- 'hello' |
TRIM(str) | 양쪽 공백 제거 | SELECT TRIM(' hello '); -- 'hello' |
LTRIM(str) | 왼쪽 공백 제거 | SELECT LTRIM(' hello'); -- 'hello' |
RTRIM(str) | 오른쪽 공백 제거 | SELECT RTRIM('hello '); -- 'hello' |
CONCAT(str1, str2, …) | 문자열 연결 | SELECT CONCAT('My', 'SQL'); -- 'MySQL' |
SUBSTRING(str, start, length) | 부분 문자열 추출 | SELECT SUBSTRING('Hello', 2, 3); -- 'ell' |
REPLACE(str, from, to) | 문자열 치환 | SELECT REPLACE('hello world', 'world', 'MySQL'); -- 'hello MySQL' |
REVERSE(str) | 문자열 뒤집기 | SELECT REVERSE('hello'); -- 'olleh' |
📌 2. 숫자(Number) 함수
| 함수 | 설명 | 예제 |
|---|
ABS(x) | 절댓값 반환 | SELECT ABS(-10); -- 10 |
CEIL(x) | 올림 (정수) | SELECT CEIL(4.2); -- 5 |
FLOOR(x) | 내림 (정수) | SELECT FLOOR(4.9); -- 4 |
ROUND(x, d) | 반올림 (d: 소수점 자리 수) | SELECT ROUND(4.567, 2); -- 4.57 |
TRUNCATE(x, d) | 소수점 이하 절삭 | SELECT TRUNCATE(4.567, 2); -- 4.56 |
MOD(x, y) | 나머지 연산 | SELECT MOD(10, 3); -- 1 |
RAND() | 0~1 사이 난수 생성 | SELECT RAND(); -- 0.6354... |
POW(x, y), POWER(x, y) | 거듭제곱 (x^y) | SELECT POW(2, 3); -- 8 |
SQRT(x) | 제곱근 반환 | SELECT SQRT(25); -- 5 |
📌 3. 날짜(Date) & 시간(Time) 함수
| 함수 | 설명 | 예제 |
|---|
NOW() | 현재 날짜 및 시간 반환 | SELECT NOW(); -- '2025-02-21 15:30:00' |
CURDATE() | 현재 날짜 반환 | SELECT CURDATE(); -- '2025-02-21' |
CURTIME() | 현재 시간 반환 | SELECT CURTIME(); -- '15:30:00' |
YEAR(date), MONTH(date), DAY(date) | 연/월/일 반환 | SELECT YEAR('2025-02-21'); -- 2025 |
HOUR(time), MINUTE(time), SECOND(time) | 시/분/초 반환 | SELECT HOUR('15:30:45'); -- 15 |
DATE_ADD(date, INTERVAL n unit) | 날짜 더하기 | SELECT DATE_ADD('2025-02-21', INTERVAL 7 DAY); -- '2025-02-28' |
DATE_SUB(date, INTERVAL n unit) | 날짜 빼기 | SELECT DATE_SUB('2025-02-21', INTERVAL 1 MONTH); -- '2025-01-21' |
DATEDIFF(date1, date2) | 날짜 차이 계산 | SELECT DATEDIFF('2025-02-21', '2025-02-01'); -- 20 |
TIMEDIFF(time1, time2) | 시간 차이 계산 | SELECT TIMEDIFF('12:00:00', '08:30:00'); -- '03:30:00' |
LAST_DAY(date) | 해당 월의 마지막 날 반환 | SELECT LAST_DAY('2025-02-15'); -- '2025-02-28' |
📌 4. 제어 흐름(Control Flow) 함수
| 함수 | 설명 | 예제 |
|---|
IF(condition, true_value, false_value) | 조건문 (삼항 연산자) | SELECT IF(10 > 5, 'YES', 'NO'); -- 'YES' |
IFNULL(expr, default_value) | NULL이면 기본값 반환 | SELECT IFNULL(NULL, 'Default'); -- 'Default' |
COALESCE(expr1, expr2, …) | NULL이 아닌 첫 번째 값 반환 | SELECT COALESCE(NULL, '', 'Hello'); -- 'Hello' |
CASE WHEN condition THEN value ELSE default END | 다중 조건 분기 | ```sql |
SELECT CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'F'
END AS grade FROM students;
---
# 📌 **5. 집계(Aggregate) 함수**
| 함수 | 설명 | 예제 |
|------|------|------|
| `COUNT(*)` | **행 개수 반환** | `SELECT COUNT(*) FROM users;` |
| `SUM(column)` | **합계 반환** | `SELECT SUM(price) FROM orders;` |
| `AVG(column)` | **평균값 반환** | `SELECT AVG(salary) FROM employees;` |
| `MIN(column)` | **최소값 반환** | `SELECT MIN(age) FROM students;` |
| `MAX(column)` | **최대값 반환** | `SELECT MAX(score) FROM exams;` |
| `GROUP_CONCAT(column SEPARATOR ', ')` | **여러 값을 하나의 문자열로 합침** | `SELECT GROUP_CONCAT(name ORDER BY id SEPARATOR ', ') FROM employees;` |
---
# 📌 **6. JSON 함수**
| 함수 | 설명 | 예제 |
|------|------|------|
| `JSON_OBJECT(key, value, …)` | **JSON 객체 생성** | `SELECT JSON_OBJECT('name', 'Alice', 'age', 25);` |
| `JSON_ARRAY(value, …)` | **JSON 배열 생성** | `SELECT JSON_ARRAY('A', 'B', 'C');` |
| `JSON_EXTRACT(json, path)` | **JSON 값 추출** | `SELECT JSON_EXTRACT('{"name": "Alice"}', '$.name'); -- 'Alice;'`|
---
# 🚀 **정리**
✔ **문자열 함수:** `LENGTH()`, `CONCAT()`, `SUBSTRING()`, `REPLACE()`
✔ **숫자 함수:** `ABS()`, `ROUND()`, `MOD()`, `POW()`
✔ **날짜/시간 함수:** `NOW()`, `DATE_ADD()`, `DATEDIFF()`, `LAST_DAY()`
✔ **제어 흐름 함수:** `IF()`, `CASE`, `COALESCE()`
✔ **집계 함수:** `COUNT()`, `SUM()`, `AVG()`, `GROUP_CONCAT()`