728x90
함수로 속성 변형하기
SQL에서는 단순히 데이터를 조회하는 것뿐만 아니라, 문자열을 자르거나, 숫자를 계산하거나, 날짜를 포맷하는 등 속성 값을 유동적으로 변형하여 결과를 만들어낼 수 있다.
이를 위해 사용되는 것이 문자 함수 / 숫자 함수 / 날짜 함수이다.
문자열 함수로 속성 변형하기
- 주요 함수
함수 | 설명 | 예시 |
CONCAT() |
문자열 연결 | CONCAT(ENAME, '-', JOB) → SMITH-CLERK |
SUBSTRING() |
문자열 자르기 | SUBSTRING(ENAME, 2) → MITH |
UPPER() / LOWER() |
대/소문자 변환 | 'smith' → 'SMITH' |
REPLACE() |
특정 문자 치환 | REPLACE('ALLEN','A','X') → XLLEN |
LENGTH() / CHAR_LENGTH() |
길이 구하기 | 바이트/문자 기준 |
LPAD() / RPAD() |
길이 맞추고 문자 채우기 | LPAD(ENAME, 10, '*') → ****SMITH |
TRIM() |
앞뒤 공백 제거 | TRIM(' ALLEN ') → ALLEN |
- 사용 예시
-- 이름과 직업을 붙여 하나의 문자열로 출력
SELECT ENAME, JOB, CONCAT(ENAME, '-', JOB) AS INFO FROM EMP;
-- 이름의 첫 글자는 대문자, 나머지는 소문자로 변형
SELECT ENAME, CONCAT(UPPER(SUBSTRING(ENAME,1,1)), LOWER(SUBSTRING(ENAME,2))) AS 변형이름 FROM EMP;
숫자 함수로 속성 변형하기
- 주요 함수
함수 | 설명 | 예시 |
ROUND() / TRUNCATE() |
반올림 / 버림 | ROUND(123.456, 1) → 123.5 |
CEIL() / FLOOR() |
올림 / 내림 | FLOOR(4.9) → 4 |
MOD() / DIV |
나머지 / 몫 | MOD(123, 100) → 23 |
ABS() |
절댓값 | ABS(-500) → 500 |
POWER() / SQRT() |
제곱 / 제곱근 | POWER(10, 2) → 100 |
RAND() |
0~1 난수 | RAND() → 0.3472 |
- 사용 예시
-- 세금 15% 제외 후 실수령액 구하기
SELECT ENAME, SAL, ROUND(SAL * 0.85, 2) AS NET_PAY FROM EMP;
-- 봉급의 마지막 두 자리 추출
SELECT ENAME, SAL, MOD(SAL, 100) AS LAST_TWO_DIGITS FROM EMP;
날짜 함수로 속성 변형하기
- 주요 함수
함수 | 설명 | 예시 |
NOW() |
현재 날짜와 시간 | SELECT NOW(); |
CURDATE() |
현재 날짜 | SELECT CURDATE(); |
CURTIME() |
현재 시간 | SELECT CURTIME(); |
YEAR(date) |
연도 추출 | YEAR('2024-08-15') |
MONTH(date) |
월 추출 | MONTH('2024-08-15') |
DAY(date) |
일 추출 | `DAY('2024-08-15') |
DAYNAME(date) |
요일 이름 | DAYNAME('2024-08-15') |
DATE_ADD(date, INTERVAL n unit) |
날짜 더하기 | DATE_ADD('2024-08-15', INTERVAL 10 DAY) |
DATE_SUB(date, INTERVAL n unit) |
날짜 빼기 | DATE_SUB('2024-08-15', INTERVAL 30 DAY) |
DATEDIFF(d1, d2) |
두 날짜 차이(일) | DATEDIFF('2024-08-15', '2024-08-10') |
TIMESTAMPDIFF(YEAR, d1, d2) |
두 날짜 간 연도 차이 | TIMESTAMPDIFF(YEAR, '2015-01-01', CURDATE()) |
DATE_FORMAT(date, format) |
날짜 포맷 변경 | DATE_FORMAT('2024-08-15', '%Y년 %m월 %d일') |
- 사용 예시
-- 입사일 기준 근속 연수 계산
SELECT ENAME, TIMESTAMPDIFF(YEAR, HIREDATE, CURDATE()) AS 근속연수 FROM EMP;
-- 입사일을 '0000년 00월 00일' 형식으로 출력
SELECT ENAME, DATE_FORMAT(HIREDATE, '%Y년 %m월 %d일') AS 입사일 FROM EMP;
728x90
'DB' 카테고리의 다른 글
[DB] SQL - JOIN에 사용되는 조건절(USING, ON)에 대해 알아보자. (0) | 2025.03.31 |
---|---|
[DB] SQL - 조인(JOIN)이란? (0) | 2025.03.31 |
[DB] SQL - 집계 함수로 조건 구문 사용해보기 (0) | 2025.03.28 |
[DB] SQL - 정규표현식 (SELECT, LIKE) (0) | 2025.03.27 |
[DB] 연관 관계 (0) | 2025.03.27 |