본문 바로가기

DB

[DB] SQL - 문자, 숫자, 날짜 함수로 속성 변형하기

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