19.11.26. 형변환의 종류, 숫자포맷, NULL처리 함수
데이터베이스 구현
2019-12-02 00:09:37
형 변환
1. 명시적 형 변환
-TO_NUMBER
-TO_DATE
-TO_CHAR
2. 묵시적 형 변환
-VARCHAR2 or CHAR -> NUMBER
-VARCHAR2 or CHAR -> DATE
-NUMBER -> VARCHAR2
-DATE -> VARCHAR2
*묵시적 형 변환이 일어나지 않도록 데이터 타입을 잘 적어야 한다.
--
SELECT *
FROM emp
WHERE empno = '7369'
=> 여기서 묵시적 형변환이 일어났음. empno 의 값들은 NUMBER 타입인데,
문자열을 검색했는데도 정상적으로 조회가 된다.
SELECT *
FROM emp
WHERE empno = TO_NUMBER('7369');
=> 이렇게 하면 문자열을 숫자로 형 변환한 거니까 되긴 하지만, 제대로 되는 건지는 알 수 없다.
이때에 EXPLAIN PLAN FOR 를 알고자 하는 쿼리의 위에 적고,
설명을 출력하려면 SELECT * FROM TABLE(dbms_xpla.display); 를 실행함으로
어떻게 실행한 것인지 계획을 알 수 있다.
EXPLAIN PLAN FOR
SELECT *
FROM emp
WHERE empno = TO_NUMBER('7369');
SELECT *
FROM TABLE(dbms_xplan.display);
=> 이렇게 실행시킨다
*실행 계획은 위에서 아래로 읽으며, 자식 모드가 있으면 자식 모드부터 읽는다.
--묵시적 형 변환 중 특히 날짜를 조심해야 한다.
SELECT *
FROM emp
WHERE hiredate >= '1981/06/01';
=> 묵시적 형 변환이 일어남. DATE 타입의 묵시적 형 변환은 사용을 권하지 않는다.
우리나라와 미국만 비교해봐도 연, 월, 일을 표기하는 순서가 다르기 때문이다.
--
SELECT *
FROM emp
WHERE hiredate >= TO_DATE ('1981/06/01', 'YY/MM/DD')
=> 이렇게 하는 것을 권함.
*YY대신, RR 을 사용할 수도 있다.
YY는 두 자리의 연도를 1900년도로 읽음.
RR 은 두자리의 연도를 50 이상이면 1900년도로, 50 미만이면 2000년대로 본다.
네 자릿수 연도일 때는 상관없음.
*숫자->문자열, 문자->숫자 로의 형변환이 많이 쓰이지 않는데, 이유는 DB까지 오지 않고,
어플리케이션 레벨에서 제어해주는 것이 있기 때문이다. 국제화, 로케일...?
*숫자 표기 1000000 --> 1,000,000.00 (반점이 찍힌 것은 문자임.)
독일의 경우 1.000.000,00 으로 점과 반점을 바꿔 사용함.
▶ 숫자 포맷
숫자 표현 : 9
자리 맞춤을 위한 0 표시 : 0
화폐단위 : L
1000자리 구분 : ,
소수점 : .
-숫자를 문자열로 바꿀 때 : TO_CHAR(숫자, '포맷')
숫자 포맷이 길어질 경우 숫자 자리를 충분히 표현해야 한다.
--
SELECT ename, sal, TO_CHAR (sal, '9,999L')
FROM emp;
=> sal 을 우리나라 돈으로 표기함. 반점을 찍고, 원화 표기를 했다.
--
SELECT TO_CHAR(100000000000000, '999,999,999,999,999,999,999')
FROM dual;
=> 100000000000000 와 같이 큰 숫자의 경우 포맷에 9를 많이 써줘야 함.
▶NULL 처리 함수 : NVL, NVL2, NULIF, COALESCE
1. NVL (exprl1, expr2)
: 함수 인자가 두 개. expr1 이 NULL 이면 expr2 를 반환.
expr1이 NULL이 아니면, expr1 을 반환.
NULL 일 때에 대체할 값을 인자로 가지고 있는 것.
2. NVL2 (expr1, expr2, expr3)
: expr IS NOT NULL = expr2 반환.
expr IS NULL = expr3 반환.
NVL2 는 expr1 을 반환하지 못한다.
3. NULLIF(expr1, expr2)
: expr1 = expr2 -> NULL 반환.
expr 1 != expr2 -> expr1 반환.
NULLIF 는 NULL 값을 만들어냄.
4. COALESCE(expr1, expr2, expr3......)
: 인자 중에 첫 번째로 등장하는 NULL이 아닌 expr N 을 반환.
* TO_DATE 는 연산 불가능. TO_CHAR 는 숫자와 연산하면 무조건 숫자로 바뀜!
'database' 카테고리의 다른 글
oracle - GROUP, JOIN, EXERD 다운로드 (0) | 2023.03.13 |
---|---|
oracle - CONDITION, VIRTUAL BOX 설치 (0) | 2023.03.13 |
oracle - 문자열, 숫자, 날짜 조작 함수 (0) | 2023.03.13 |
oracle - 연산자 우선순위, ORDER BY, ROWNUM (0) | 2023.03.13 |
oracle - IN, LIKE, IS NOT NULL, AND, OR, NOT (0) | 2023.03.13 |