일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSS
- 코딩
- 에러
- datatype
- 오라클
- SQL
- 오라클오류
- oracle
- Eclipse
- 서블릿
- From
- 자바
- 삐옥
- VisualStudioCode
- JS
- 이클립스
- Java
- 연산자
- sqldeveloper
- function
- 자료형
- 변수
- variable
- error
- 오류
- select
- HTML
- Servlet
- Operator
- 개발자
- Today
- Total
뇨내
[Oracle - SQL Developer] Casting 형변환 본문
Casting 형변환
1. to_char() : 숫자 -> 문자
2. to_char() : 날짜 -> 문자
3. to_number() : 문자 -> 숫자
4. to_date() : 문자 -> 날짜
to_char() : 숫자 → 문자
to_char(컬럼명, '형식문자열')
형식문자열 구성요소 (숫자 -> 문자)
1. 9 : 숫자 1개를 문자 1개로 바꾸는 역할(빈자리는 버린다. = 공백으로 표현됨), 부호 자리를 확보
2. 0 : 숫자 1개를 문자 1개로 바꾸는 역할(빈자리는 0으로 채운다)
3. $ : 통합 기호 표현
4. L : 통화기호 표현(로컬) > 설정에 따라 변함
5. . : 소수점 표시
6. , : 자릿수 표시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
--=========================================
-- 9, 0
select
weight, -- 우측정렬
'@' || to_char(weight) || '@', -- 좌측정렬, 간접적으로 형변환 확인!
'@' || to_char(weight, '999') || '@', -- 999 = **3개의 자리**를 확보하라는 의미
--'@' || to_char(weight*-1, '999') || '@' -- 부호자리 확보 확인용, 앞에 공백이아닌 부호자리 확보용 이었음
--'@' || substr(to_char(weight, '999'), 2 ) || '@' -- 좋은 방법은 아님, 마이너스를 날려버림
'@' || to_char(weight, '00000') || '@', -- 공백을 0으로 채움
'@' || to_char(weight, '99') || '@' -- ### 이런식으로 나옴 => 숫자의 최대자리수를 알아야 한다는 의미
from tblComedian;
--=========================================
-- $, L
select
100,
to_char(100, '999'),
'$' || to_char(100, '999'),
to_char(100, '$999'),
to_char(100, 'L999')
from dual;
--==========================================
-- '.', ','
select
123.456,
to_char(123.456, '999999'),
to_char(123.456, '999.999'),
to_char(123.456, '9999.99') -- 반올림도 됨
from dual;
select
123456789,
to_char(123456789),
to_char(123456789, '999,999,999'), -- sql은 직접 ',' 찍어야함
to_char(123456789, '9,9999,9999')
from dual;
--==========================================
|
cs |
to_char() : 날짜 → 문자
- 형변환보다는, 날짜의 일부 요소를 원하는 형태로 추출하는 역할★★★★★
char to_char(컬럼명, '형식 문자열')
형식 문자열 구성요소
1. yyyy
2. yy
3. month
4. mon
5. mm
6. day
7. dy
8. ddd
9. dd
10. d
11. hh
12. hh24
13. mi
14. ss
15. am(pm)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
select sysdate from dual; --베이스
select to_char(sysdate, 'yyyy')from dual; --2021, 년(4자리) 사용 多 *****
select to_char(sysdate, 'yy')from dual; --21, 년(2자리)
select to_char(sysdate, 'month')from dual; --11월(풀네임)
select to_char(sysdate, 'mon')from dual; --11월(약어)
select to_char(sysdate, 'mm')from dual; --11(2자리) *****
select to_char(sysdate, 'day')from dual; --월요일(풀네임)
select to_char(sysdate, 'dy')from dual; --월(약어)
select to_char(sysdate, 'ddd')from dual; --319(일, 올해의 며칠)
select to_char(sysdate, 'dd')from dual; --15 (일, 이번월의 며칠) *****
select to_char(sysdate, 'd')from dual; --2 (일, 이번주의 며칠 = 요일)
select to_char(sysdate, 'hh')from dual; --10, 시(12H)
select to_char(sysdate, 'hh24')from dual; --10, 시(24H) *****
select to_char(sysdate, 'mi')from dual; --40, 분 *****
select to_char(sysdate, 'ss')from dual; --58, 초 *****
select to_char(sysdate, 'am')from dual; --오전
select to_char(sysdate, 'pm')from dual; --오전
|
cs |
1
2
3
4
5
6
7
8
9
10
|
select
sysdate, --RR/MM/DD ***** 이 표현은 클라이언트툴에 따라 다름
to_char(sysdate,'yyyy-mm-dd') as hour, -- ***** 이 표현은 모든 클라이언트툴에 동일하게 나옴 왜? 강제 변환을 시킨 것이므로
-- 그래서 위의 방법으로 써야함!!!!***
to_char(sysdate, 'hh24:mi:ss') as min,
to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') as time,
to_char(sysdate, 'day am hh:mi:ss') as "가끔" -- 형식문자열에는 공백, 대시, 콜론만 허용범위임
--to_char(sysdate, 'day am hh시mi분ss초) as "가끔" -- X
from dual;
|
cs |
to_number()
to_number(컬럼명)
1
2
3
4
5
6
7
8
9
10
11
12
|
select
'123' as "AAAAAAAAAAAAAAAAAAAA",
to_number('123') as "AAAAAAAAAAAAAAAAAAAA"
--정렬 볼려고 alias 이렇게 넓게한것
from dual;
select
'123'*2 as "AAAAAAAAAAAAAAAAAAAA", -- 문자열 * 2 > 작동함 > 암시적 형변환 발생
to_number('123') *2 as "AAAAAAAAAAAAAAAAAAAA"
from dual;
|
cs |
to_date()
to_date(컬럼명, 형식 문자열)
SQL은 날짜 상수를 문자열 상수를 통해서 만든다 (by 문맥)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
select * from tblInsa where join > '2015-01-01'; -- 날짜(date)와 비교중 > 암시적으로 형변환
select name, '2015-01-01', sysdate from tblCompany; -- 이 때의 '2015-01-01'은 문자열. 이거는 날짜가 아니고 형변환x
select name, '2021-11-16' - join from tblCompany; -- X
select * from tblCompany where join > '2015-01-01';
select * from tblCompany where join > to_date('2015-01-01');
select name, '2015-01-01', sysdate from tblCompany;
select name, to_date('2015-01-01'), sysdate from tblCompany;
select * from tblCompany
where join > to_date('2015-01-01 12:00:00', 'yyyy-mm-dd hh24:mi:ss');
select name,' 2021-11-16' - join from tblCompany;
select name, to_date('2021-11-16') - join from tblCompany;
|
cs |
*추가
NULL 관련 함수
nvl(expr1, expr2)
null value
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
select
name,
case
when population is not null then population
when population is null then -1 --문자넣으면 에러, 하나의 컬럼은 자료형이 똑같아야 한다.
end
from tblCountry;
select name, nvl(population, 999) from Country; --nvl() 사용 예시
select name, nvl(tel,'연락처없음') from tblMember; --일종의 null인 값에 대한 replace!
-- nvl2(expr1, expr2, expr3)
select name, tel, nvl2(tel, 'AAA','BBB') from tblMember;
select name, nvl2(tel, '연락처 있음', '연락처 없음') from tblMember;
select
name,
case
when tel is null then '연락처 없음'
when tel is not null then '연락처 있음'
end
from tblMember;
|
cs |
'Oracle > Casting + Sequence + Constraint' 카테고리의 다른 글
[Oracle-SQL Developer] Sequence 시퀀스 (0) | 2021.11.21 |
---|---|
[Oracle-SQL Developer] Constraint 제약사항 (0) | 2021.11.21 |