오늘은 조작함수 중 데이터 정의 함수를 학습하는 시간입니다! 오늘도 어떤 데이터 정의 함수가 있는지 알아보러 가보겠습니다~
[데이터 타입의 종류]
데이터 형태 | 데이터 타입 종류 |
문자 타입 | CHAR(문자열의 길이) |
VARCHAR2(문자열의 길이) | |
숫자 | NUMBER(정수 자릿수, 소수 자릿수) |
날짜 | DATE |
[자동 데이터 타입 변환]
기존 데이터 | 자동변환 타입 |
VARCHAR2 / CHAR | NUMBER(숫자) |
VARCHAR2 / CHAR | DATE(날짜) |
NUMBER | VARCHAR2(문자) |
DATE | VARCHAR2(문자) |
[함수]
함수 명 | 기능 | 변환 예시 | |
TO_CHAR | 문자, 숫자, 날짜를 지정형식의 타입(VARCHAR2)으로 변환 | 숫자 >> 문자, 날짜 >> 문자 | |
TO_NUMBER | 문자를 숫자 타입으로 변환 | 문자 >> 숫자 | |
TO_DATE | 날짜를 나타내는 문자열을 지정 형식의 날짜 타입으로 변환 | 문자 >> 날짜 | |
NVL | 입력된 데이터의 NULL 값을 원하는 값으로 치환 | NULL >> 특정 값 |
위 함수들을 각각의 함수마다 정~말 다양한 옵션이 존재한다고 하는데요? 잠깐 살펴보더라도 엄청 많더라고요,,,;;;; 오늘은 긴 학습이 될 것 같네요,,,ㅎ
처음부터 하나씩 살펴볼까요?
1. TO_CHAR
[날짜 및 시간 형식 지정]
설명 | 지정형식 | 사용방법 | 기능 |
세기 | CC | TO_CHAR(입력날짜, 'CC') | 입력 날짜가 몇세기인지 반환 |
연도 | YYYY/YYY/YY/Y | TO_CHAR(입력날짜, 'YYYY') | Y개수에 따라 출력 결과가 달라짐 |
문자로 표현된 연도 | 'YEAR' | TO_CHAR(입력날짜, 'YEAR') | 입력날짜의 연도가 문자로 출력 |
월 정보 추출 | MM, MON | TO_CHAR(입력날짜, 'MM') | 입력날짜 월의 결과를 숫자, 문자로 출력 |
일 정보 추출 | DAY, DY, DDD, DD, D | TO_CHAR(입력날짜, 'DAY') | 입력날짜 일의 결과를 숫자, 문자로 출력 |
분기 | Q | TO_CHAR(입력날짜, 'Q') | 입력날짜의 결과를 숫자로 출력 |
시간형식 | AM/PM/HH/HH12/HH24/MI/SS | TO_CHAR(입력날짜, 'HH MI SS PM') | 입력날짜의 결과를 숫자로 출력 |
출력결과 표현옵션(문자) | "문자" | 위의 날짜/시간 제어 함수들을 조합하여 원하는 형식의 날짜를 표현할 수 있음 | |
출력결과 표현옵션(기호) | /, ., -, : |
TO_CHAR 함수는 위처럼 문자만을 제어하는 것이 아닌 숫자 표현도 제어가 가능합니다!
[숫자 표현 제어]
설명 | 지정형식 | 사용방법 | 기능 |
자리수지정 | 9 | TO_CHAR(칼럼, '99999999') | 출력 숫자포함 9의 개수만큼 공백으로 앞자리를 채워줌 |
자리수지정 | 0 | TO_CHAR(칼럼, '09999999') | 출력 숫자 포함 9의 개수만큼 0으로 앞자리를 채워줌 |
화폐 기호 | $ | TO_CHAR(칼럼, '$9999999') | 출력 숫자 앞에 $ 표시를 해줌 |
화폐 기호 | L | TO_CHAR(칼럼, 'L9999999') | 출력 숫자 앞에 \(원)표시를 해줌 |
소수점 | . | TO_CHAR(칼럼, '99999.99) | 입력한 .의 위치에 소수점 표시를 해줌 |
쉼표 | , | TO_CHAR(칼럼, '9,999,999') | 입력한 ,의 위치에 자리를 표시 해줌 |
2. TO_NUMBER
TO_NUMBER을 배우기 이전에 암시적 형변환에 대한 예제를 잠시 알아보겠습니다.
1. TO_NUMBER 문자를 숫자로
SELECT '123' + 100 FROM daul;
SELECT TO_NUMBER('123') + 100 FROM dual;
첫번째 문장도 오라클이 인식해서 변환하여 출력하기 때문에 둘 다 가능하지만
문자 타입을 숫자 타입으로 변환해서 출력하는 것이 좋음
2. NVL NULL 값이 존재하는 것을 원하는 값으로 변경
SELECT salary, commission_pct
, salary + commission_pct
FROM employees;
//연산하는 값이 미지수일 경우 특정값을 알고 있더라도 null이 포함된다면 연산 출력값이 null이 됨
SELECT salary, commission_pct
, salary + nvl(commission_pct, 0) //nvl을 사용할 경우 null 값을 0으로 치환하여 계산 후 출력
FROM employees;
SELECT salary, commission_pct
, salary + nvl(commission_pct, 'a') //문자로도 변환이 가능함. (타입이 동일해야 가능함) >> 타입이 다르면 TO_CHAR을 이용해 타입 변환이 필요함
FROM employees;
3. TO_CHAR 문자/숫자/날짜 다루기
SELECT '2023/01/13' FROM dual;
SELECT TO_CHAR('2023/01/13', 'CC') FROM dual; //수치가 부적합함 (현재 문자열 형태이기 때문)
>> SELECT TO_CHAR(TO_DATE('2023/01/13'), 'CC') FROM dual; //TO_DATE를 사용하여 날짜 형태로 타입을 변환
오늘은 함수 중 앞부분에 해당하는 TO_CHAR과 TO_NUMBER에 대해서 알아봤는데요. 내일은 너무너무 당연히 알겠지만 이 다음 나머지 함수에 대해서 알아보겠죠,,? 오늘의 학습은 여기서 마무리 하도록 하겠습니다!
'공부 자료 > SQL' 카테고리의 다른 글
[15일차] Case When. 원하는 값 만들기 (0) | 2023.01.15 |
---|---|
[14일차] 조작함수 사용하기 part4. 날짜 및 그룹 함 (0) | 2023.01.14 |
[12일차] 조작함수 사용하기 part2-2. 문자 함수 (0) | 2023.01.12 |
[11일차] 조작함수 사용하기 part2-1. 문자 함수 (0) | 2023.01.12 |
[10일차] 조작함수 사용하기 part1 - 수치형 함수 (0) | 2023.01.10 |