[Oracle] 오라클 #9, Casting, 형변환함수
- Database/Oracle
- 2019. 2. 20. 21:19
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;
'Database > Oracle' 카테고리의 다른 글
[Oracle] 오라클 #11, 시퀀스(Sequence) (0) | 2019.02.23 |
---|---|
[Oracle] 오라클 #10, DDL, DML (0) | 2019.02.21 |
[Oracle] 오라클 #8, 오라클 함수(문자열 함수) (0) | 2019.02.16 |
[Oracle] 오라클 #7, 숫자함수와 날짜함수(feat.dual 테이블) (0) | 2019.02.16 |
[Oracle] 오라클 #6, 오라클함수(집계함수) (0) | 2019.02.16 |