Programming/SQL

형변환 함수 + NULL 처리 함수. 2021-08-03

최동훈1 2021. 8. 3. 17:10

우선 오라클에서의 데이터 타입은 크게 숫자형, 문자형, 날짜형 으로 나눌수 있는데 이 3개는 서로 형변환 함수를 통해 각각의 타입으로 바꿀수 있다. 대표적으로는 그러나 숫자-> 날짜로는 바꿀수 없고 무조건 문자형을 거친다음 변환시켜야 한다.

간단히 도식으로 표현하자면,

숫자형 -> ->문자형-> -> 날짜형
숫자형<- <-문자형<- <-날짜형

이런식으로 변환이 이루어진다는 것이다.

차례대로

1. 숫자형 -> 문자형 : TO_CHAR()

2.문자형 -> 날짜형 : TO_DATE()

3.날짜형 -> 문자형 : TO_CHAR()

4.문자형-> 숫자형 : TO_NUMBER()

 

이렇게 함수가 된다. 또한 각 함수별로, 문자 포맷형식을 지정해서 그 형식에 맞는 문자/날짜/숫자 등을 변환해줄수 있는데 내가 이전 포스트에서 쓴 ALTER session set NLS_DATE_FORMAT =  ' yyyy-mm-dd hh24:mm:ss'; 이 형식이 포맷팅 형식의 예이다.

 

각 함수별 예시. 

1.숫자->문자. TO_CHAR()

select TO_char('123456789','00999,999,999.99')||'원' from dual;
--식별자: 9:0~9숫자의미 ,:1000단위콤마 .:소숫점 콤마

대신 숫자로 쓰는 포멧팅 형은 문자열 자리수 이상이어야 한다.

2. 문자->날짜. TO_DATE()

select to_date('2021-8-03 17:55:24')from dual;

처음에는 이렇게 하니 정상적으로 나오지 않고 

이런 오류가 나왔다. 그래서 나는 내가 적은 이 문자가 어떤 형식으로 이루어진 건지 날짜형 포멧형식을 통해 알려줬다.

select to_date('2021-8-03 17:55:24','yyyy-mm-dd hh24:mi:ss'  )from dual;

이렇게 문자열의 날짜 표현 방식을 적으니 바로 원하는 결과가 나왔다.

이걸 2021-08-03 17:55:24 이렇게 바꾸고 싶다면 이전포스트의 ALTER함수로 세션의 NLS 포맷을 바꾸면 된다.

3. 날짜 -> 문자 TO_CHAR()

select to_char(sysdate) from dual;

그냥 이건 이렇게만 한다면, 날짜를 바로 문자열로 바꾸어 놓을수 있다.

물론 이것도 포맷팅 형식을 쓴다면 더 정교하게 표현 가능하다.

select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;

포맷팅 형식에 맞게 출력된 모습.

4. 문자 -> 숫자 TO_NUMBER

근데 이 케이스는 솔직히 함수를 쓰기보다. + 연산을 통해 자연스럽게 자동 형변환 시키는 경우가 많다.

select '2'+3 from dual;
select TO_NUMBER('2')+3 from dual;

이 2가지 경우 모두 숫자 5 라는 동일한 결과 출력.

 

공부시간 1시간.

순공시간 40분.

 

오늘도 오후에 통채로 어르신 모시고 동강병원 치과까지 가느라 오후공부를 아예못했다. 그래도 오늘공부한 내용은 완벽히 정리한거 같아서 기쁘다.