새싹 하이브리드 클라우드/Database
Oracle - 변환 함수
mingming_96
2023. 10. 9. 17:41
암시적 데이터 유형 변환
Oracle 서버는 자동으로 표현식에서 데이터 유형 변환을 수행합니다.
job_id 의 Datatype은 VARCHAR2 이지만 job_id = 2 표현식을 사용하면 숫자 2가 문자열 '2'로 암시적으로 변환됩니다.
Source | Target |
VARCHAR2 or CHAR | NUMBER |
VARCHAR2 or CHAR | DATE |
명시적 데이터 유형 변환
TO_CHAR 함수
TO_CHAR(date,['format_model'])
format_model
- 작은 따옴표로 묶어야 합니다.
- 대소문자를 구분합니다.
- 임의의 유효한 날짜 형식 요소를 포함할 수 있습니다.
- 채워진 공백을 제거하거나 선행 0을 출력하지 않는 fm 요소를 갖습니다.
- 쉼표로 날짜갑소가 구분됩니다.
날짜 형식 모델
요소 | 결과 |
YYYY | 숫자로 된 전체 연도 |
YEAR | 영어 철자로 표기된 연도 |
MM | 월의 2자리 값 |
MONTH | 월의 3자 약어 |
DY | 요일의 3자 약어 |
DAY | 요일 전체 이름 |
DD | 숫자 형식의 월간 일 |
HH 또는 HH12 | 12시간 형식 |
HH24 | 24시간 형식 |
MI | 분(0~59) |
SS | 초(0~59) |
SSSSS | 자정 이후의 초(0~86399) |
날짜에 TO_CHAR 함수 사용
SELECT last_name, TO_CHAR(hire_date,'fmDD MONTH YYYY') AS HIREDATE
FROM employees
## fmDD 공백없이 표현
CREATE TABLE test1
AS
SELECT last_name, TO_CHAR(hire_date, 'YYYYMMHH24MISS') AS HIREDATE
FROM employees;
DESC test1;
숫자에 TO_CHAR함수 사용
요소 | 결과 |
9 | 숫자를 나타냄 |
0 | 0이 표시되로록 강제 적용 |
$ | 부동 달러 기호 배치 |
. | 소수점 출력 |
, | 천 단위 표시자로 출력 |
SELECT TO_CHAR(salary, '$99,999.00') AS SALARY
FROM employees
WHERE last_name = 'Ernst';
TO_NUBER 함수
TO_NUMBER(char[, 'format_model'])
TO_DATE 함수
TO_DATE(char[,'format_model'])
문자 형식을날짜 형식으로 변경
CREATE table test2
AS
SELECT last_name, TO_DATE(hire_date, 'YYYY/MM HH24:MI:SS') AS HIREDATE
FROM test1;
DESC test2;
일반 함수
함수 | 설명 |
NVL | null 값을 실제 값으로 변환합니다. |
NVL2 | expr1이 null 이 아닌 경우 NVL2는 expr2를 반환합니다. expr1이 null인 경우 NVL2는 expr3를 반환합니다. 인수 expr1은 임의의 데이터 유형을 가질 수 있습니다. |
NULLIF | 두 표현식을 비교하여 같으면 null을 반환하고 같지 않으면 첫 번째 표현식을 반환합니다. |
COALESCE | 표현식 리스트에서 null 이 아닌 첫 번째 표현식으로 반환합니다. |
NVL 함수
- null 값을 실제 값으로 변환합니다.
- 사용할 수 있는 데이터 유형은 날짜, 문자 및 숫자입니다.
- 데이터 유형이 일치해야합니다.
NVL(expr1, expr2)
- expr1은 null을 포함할 수있는 소스 값 또는 표현식입니다.
- expr2은 null을 변환하기 위한 대상 값입니다.
데이터 유형 | 변환 예제 |
NUMBER | NVL(number_column, 9) |
DATE | NVL(date_column, '2023-01-14') |
CHAR 또는 VARCHAR2 | NVL(character_column, 'Unavailable') |
SELECT last_name, salary, NVL(commission_pct,0), (salary*12) + (salary*12*(NVL(commission_pct,0))) AN_SAL
FROM employees;
NVL2 함수
- 첫번째 표현식을 검사합니다.
- 첫번째 표현식이 null이 아니면 NVL2 함수는 두번쨰 표현식을 반환합니다.
- 첫번째 표현식이 null이면 세번째 표현식을 반환합니다.
NVL2(expr1, expr2, expr3)
- expr1은 null을 포함할 수 있는 소스 값 또는 표현식입니다,.
- expr은 expr1이 null이 아닌 경우에 반환되는 값입니다.
- expr3는 expr1이 null인 경우 반환되는 값입니다.
SELECT last_name, salary, commission_pct, NVL2(commission_pct, 'SAL+COMM', 'SAL') income
FROM employees
WHERE department_id IN (50,80);
NULLIF 함수
- NULLIF 함수는 두 표현식을 비교합니다.
NULLIF(expr1, expr2)
- NULL IF 함수가 expr1과 expr2를 비교합니다.
- 두 표현식이 같으면 이 함수는 null을 반환합니다.
- 두표현식이 다르면 이 함수는 expr1을 반환합니다. 그러나 exrp1에 대해 리터럴 NULL을 지정할 수 없습니다.
SELECT first_name, LENGTH(fist_name) "expr1",
last_name, LENGTH(last_name) "expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) AS result
FROM employees;
COALESCE 함수
- NVL 함수 대신 COALESCE 함수를 사용했을 때의 이점은 COALESCE 함수가 여러 대체값을 수용할 수 있다는 것입니다.
- 첫번쨰 표현식이 null이 아닌 경우 COALESCE 함수는 해당 표현식을 반환합니다. 그렇지 않은 경우 나머지 표현식에 CALESCE를 수행합니다.
COALESCE(expr1, expr2, ... exprn)
- expr1은 표현식이 null 이 아닌 경우 이 표현식을 반환합니다.
- expr2은 첫번째 표현식이 null이고 이 표현식이 null이 아닌 경우 이 표현식을 반환합니다.
- exprn은 선행 표현식이 null인 경우 이 표현식을 반환합니다.
SELECT last_name, salary, commission_pct,
COALESCE(slary + (commission_pct*salary), salary+2000) "New Salary"
FROM employees;
- 커미션을 받지 않는 사원에게 $2000의 급여 인상을 제공합니다.
- 또한 커미션을 받는 사원의 경우 기존 급여에 커미션 금액을 추가한새 급여를 query에서 계산해야 합니다.