CS
[SQLD] 변환 함수
2026년 02월 13일 16:46
SQLD 2과목 – 변환함수
- 데이터 타입을 다른 함수로 변환하는 함수
변환 함수
1. TO_NUMBER
- 문자 타입 데이터 → 숫자 타입 데이터
TO_NUMBER(대상)
특징
- 숫자 형태의 문자와 숫자 데이터 간 연산시 묵시적 형 변환 발생해 연산 정상적 수행
SELECT TO_NUMBER('1') -- 1
FROM DUAL;
묵시적 형변환
SELECT '1' + 1 -- 2
FROM DUAL;
2. TO_CHAR
- 숫자/날짜 타입 데이터 → 문자 타입 데이터
- 반환 결과는 항상 문자
TO_CHAR(대상 [, FORMAT])
특징
- 반환 대상이 숫자일 경우, 숫자 변환에 필요한 FORMAT 전달
- 반환 대상이 날짜일 경우, 날짜 변환에 필요한 FORMAT 전달
- FORMAT 생략 시 단순히 문자 타입으로만 변환
📌 숫자 FORMAT
| FORMAT | 설명 | 예 |
|---|---|---|
| 9 | 숫자를 자릿수만큼 출력 자릿수 부족 시 공백 | TO_CHAR(100, '9999'): ' 100' |
| 0 | 숫자를 자릿수만큼 출력 자릿수 부족 시 0 | TO_CHAR(100, '0000'): '0100' |
| 9,999 | 천 단위 구분자를 표시함 | TO_CHAR(1000, '9,999'): '1,000' |
| $9,999 | 달러($) 기호를 출력함 | TO_CHAR(1000, '$9999'): '$1000' |
| 99.99 | 소수점 위치를 지정함 | TO_CHAR(10, '99.99'): '10.00' |
📌 날짜 FORMAT
- MONTH, DAY, DY, MON 등 문자 출력 포맷은 대소문자를 구분하므로 포맷 입력 형태에 따라 출력 결과 상이
- 포맷을 소문자로 입력하면 소문자로, 대문자로 입력하면 대문자로 출력
| FORMAT | 설명 | 예시 |
|---|---|---|
| YYYY / RRRR | 연도 4자리 출력 | TO_CHAR(SYSDATE, 'YYYY'): '2026' TO_CHAR(SYSDATE, 'RRRR'): '2026' |
| YY / RR | 연도 2자리 출력 | TO_CHAR(SYSDATE, 'YY'): '26' TO_CHAR(SYSDATE, 'RR'): '26' |
| MM | 월 숫자 2자리 출력 | TO_CHAR(SYSDATE, 'MM'): '02' |
| MON | 월 문자 약어 출력 | TO_CHAR(SYSDATE, 'MON'): 'FEB' or '2월' |
| MONTH | 월 문자 출력 | TO_CHAR(SYSDATE, 'MON'): 'FEBRUARY' or '2월' |
| DD | 일 숫자 2자리 출력 | TO_CHAR(SYSDATE, 'DD'): '13' |
| DAY | 요일 문자 출력 | TO_CHAR(SYSDATE, 'DAY'): 'FRIDAY' or '금요일' |
| DY | 요일 문자 약어 출력 | TO_CHAR(SYSDATE, 'DY'): 'FRI' or '금요일' |
| HH / HH12 | 시간 12시간 기준 출력 | TO_CHAR(SYSDATE, 'HH'): '02' |
| HH24 | 시간 24시간 기준 출력 | TO_CHAR(SYSDATE, 'HH24'): '14' |
| MI | 분 출력 | TO_CHAR(SYSDATE, 'MI'): '45' |
| SS | 초 출력 | TO_CHAR(SYSDATE, 'SS'): '24' |
| Q | 날짜가 속한 분기 출력 | TO_CHAR(SYSDATE, 'Q'): '1' |
3. TO_DATE
- 문자 타입 데이터 → 날짜 타입 데이터
- 날짜처럼 생긴 문자열을 날짜 데이터로 인식시키기 위함
TO_DATE(날짜문자열 [, FORMAT])
특징
- 날짜처럼 생긴 날짜문자열을 지정한 FORMAT에 맞게 해석하여 날짜 타입으로 변환
- FORMAT 생략 시 세션의 기본 날짜 형식 기준으로 해석
SELECT TO_DATE('12/10/14', 'DD/MM/YY') -- 2014/10/12 00:00:00
FROM DUAL;
두자리 연도 YY / RR 해석
| 구분 | 설명 |
|---|---|
| YY | 입력된 두 자리 연도를 현재 세기 기준 해석 49 -> 2049, 50 -> 2050 |
| RR | 입력된 두 자리 연도를 현재 연도 기준 과거 또는 미래 해석 00-49 -> 20XX, 50-99 -> 19XX |
TO_DATE 에서 지정되지 않은 날짜 요소 처리 방식
- 지정되지 않은 연도와 월은 현재 날짜 기준으로 설정
- 지정되지 않은 일, 시, 분, 초는 초기값으로 설정
날짜 연산
- 날짜 타입의 값과 숫자 간 더하기, 빼기 연산 가능
- 숫자 1은 하루를 의미
- 숫자 1/24는 한시간을 의미
- 날짜 - 날짜 연산의 결과는 두 날짜간의 일수 차이 숫자 반환
SELECT TO_DATE('25/12/31 14:30:00', 'YY/MM/DD HH:MI:SS') + 1, -- 2026/01/01 14:30:00
SELECT TO_DATE('25/12/31 14:30:00', 'YY/MM/DD HH:MI:SS') + 1/24, -- 2025/12/31 15:30:00
SELECT TO_DATE('25/12/31 14:30:00', 'YY/MM/DD HH:MI:SS') + 1/24/60, -- 2025/12/31 14:31:00
SELECT TO_DATE('25/12/31 14:30:00', 'YY/MM/DD HH:MI:SS') + 10/24/60 -- 2025/12/31 14:40:00
