[Oracle] 오라클 #9, Casting, 형변환함수

Casting 형변환

형변환 함수

1. to_char() : 숫자 -> 문자

2. to_char() : 날짜 -> 문자

3. to_number() : 문자 -> 숫자

4. to_date() : 문자 -> 날짜



1. to_char(): 숫자 -> 문자

- char to_char(컬럼명,형식문자열)


형식문자열 구성 요소

  • 9 : 숫자 1자리를 문자 1개로 바꾸는 역할(모자란 자리수는 공백으로 채운다)
  • 0 : 숫자 1자리를 문자 1개로 바꾸는 역할(모자란 자리수는 '0'으로 채운다)
  • $ : 달러표시
  • L : 지역 통화 표시(우리나라는 원)
  • . : 소수점 표시
  • , : 천단위 표시



select 100 as "aaaaaaaaaaaaaaaaaaaaaaaaaaaa",'100' as"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb."from dual; --An identifier with more than 30 characters was specified.

select to_char(100,'999') from dual; --100이라는 숫자를 -> '100'이라는 문자로 , 나머지는 공백으로

select to_char(100,'000') from dual; --100 -> '100'


select to_char(10,'999') from dual; -- 10 -> '10'

select to_char(10,'000') from dual; -- 10 -> '010'


select to_char(1,'999') from dual; -- 1 -> '1'

select to_char(1,'000') from dual; -- 1 -> '001'


--실인자인 숫자보다 형식문자열인 자릿수가 더 크면 형변환 불가.

select to_char(1000,'999') from dual; -- 1000 -> ####

select to_char(1000,'000') from dual; -- 1000 -> ####



--주의점 : trim() 처리를 해서 쓸모 없는 공백을 제거한 후 사용하는 것을 권장!!

select  

'@'||to_char(-100,'999'),

'@'||to_char(100,'999')

from dual;


select length(to_char(1,'999')), '@'||trim(to_char(1,'999')) from dual;



<$>

select to_char(100,'$999') from dual;

select to_char(100,'999원') from dual;--위에 6개의 형식문자외에 올수가 없다. 999 자리에


select to_char(100,'L999') from dual;

select to_char(100,'999')||'원' from dual;


select to_char(123.456,'999.999')from dual;

select to_char(123.456,'9999.99')from dual;


select to_char(1000000,'9,999,999') from dual;



2. to_char() : 날짜 -> 문자(***)

-char to_char(컬럼명, 형식문자열)


형식문자열 구성 요소

-yyyy

-yy

-month

-mon

-mm

-day

-dy

-ddd,dd,d

-hh(hh12),hh24

-mi

-ss

-am(pm)

*/


select sysdate from dual;

select to_char(sysdate,'yyyy') from dual;


--쓰면 안됨.(툴의 설정에 따라 결과가 다르다) > date형은 문자열을 취급을 하면 안된다.

select substr(sysdate,1,10)from dual;

select substr(sysdate,9,2)from dual;

select substr(sysdate,11)from dual;



select to_char(sysdate,'yyyy') from dual;

select to_char(sysdate,'yy') from dual;     --년도 2자리

select to_char(sysdate,'month') from dual;  --

select to_char(sysdate,'mon') from dual;    --8월,로케일(풀네임)

select to_char(sysdate,'mm') from dual;     --8월,로케일(약어)

select to_char(sysdate,'day') from dual;    --화요일,로케일(풀네임)

select to_char(sysdate,'dy') from dual;     --화, 로케일(약어

select to_char(sysdate,'ddd') from dual;    --올해들어서 몇일짼지.  

select to_char(sysdate,'dd') from dual;     --24, 이번달들어 며칠째인지

select to_char(sysdate,'d') from dual;      --6, 이번주들어 며칠짼지

select to_char(sysdate,'hh12') from dual;   --11, 시간(12시간 기준)

select to_char(sysdate,'hh') from dual;     

select to_char(sysdate,'hh24') from dual;   --11, 시간(24시간 기준)******업무용

select to_char(sysdate,'mi') from dual;     --02,분

select to_char(sysdate,'ss') from dual;     --05,초

select to_char(sysdate,'am') from dual;     --오전/오후

select to_char(sysdate,'pm') from dual;     --오전/오후


select to_char(sysdate,'yyyy-mm-dd') from dual;

select to_char(sysdate,'hh24:mi:ss') from dual;

select to_char(sysdate,'am hh24:mi:ss') from dual;



--조건절에 사용

--12월에 입사한 직원은?

select * from tblinsa where to_char(ibsadate,'mm')='12';


--토요일에 등록한 할일은?

select title from tbltodo where to_char(adddate,'day')='토요일'; --우리나라에서만 프로그램이된다...

select title from tbltodo where to_char(adddate,'d')='7'; -- ****이걸로하자


--정렬(입사월)

select * from tblinsa order by to_char(ibsadate,'mm') asc;


--주의!!!!!

--1997년~1999년 사이에 입사한 직원?

select * from tblinsa

--    where ibsadate between '1997-01-01' and '1999-12-31';--위험.. 손실분 발생!!

--    where ibsadate between '1997-01-01' and '2000-01-01';--위험.. 과잉분 발생!!

--    where ibsadate between '1997-01-01 00:00:00' and '1999-12-31 00:00:00'; --사용 불가 (툴에다가 설정해놔서 그런거)    

      where to_char(ibsadate,'yyyy') between 1997 and 1999; -- ****이걸로할것



3. to_number() : 문자 -> 숫자

- number to_number(문자열)

- 자바 : Integer.parseInt()


select to_number('123')*2 --우측정렬 -> 숫자란 이야기/ 좌측정렬 -> 문자

from dual; 

select '123'*2 from dual; --문자열 * 숫자도 계산이 됨.



4. to_date() : 문자 -> 날짜(***)

- date to_date(컬럼명,'형식문자열')

- 형식문자열이 2번과 동일


--SQl에서는 날짜 시간데이터의 리터럴은 문맥에 따라 문자열이되기도하고 날짜시간형이 되기도 한다.

select '2018-08-24', sysdate from dual; --문자열

select * from tblinsa where ibsadate > '2018-08-24'; --날짜시간

select to_date('2018-08-24','yyyy-mm-dd'/*이게중요*/),sysdate from dual;

select to_date('2018-08-24 11:37:40','yyyy-mm-dd hh24:mi:ss'),sysdate from dual;


댓글

Designed by JB FACTORY