1. nvl(a,b) : a가 null이면 b 값으로 치환
2. nvl2(a,b,c) : a가 null이 아니면 b로, null이면 c로 치환
3. decode ( a, s1, r1, s2, r2, ... d ) : a가 s1이면 r1, s2 이면 r2 모두 아니면 d
4. case when exp1 then r1
when exp2 then r2
when exp3 then r3 .....
else d
end : exp1 를 만족하면 r1, exp2 를 만족하면 r2, exp3를 만족하면 r3, 모두 아니면 d
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248 |
SQL> select name , decode(substr(idnum, 7, 1), '1' , '남' ,
2 '2' , '여' ,
3 '?' )
4 from student
5 where deptno=102; NAME DE ---------- -- 김진영 여 오유석 남 하나리 여 윤진욱 남 SQL> select profno, name , position, to_char(round((sysdate-hiredate)/365,1), '09.9' ) worked_date,
2 sal,decode(position, '교수' , decode( name , '김도훈' , '석좌교수후보' )) etc
3 from professor
4* order by position, sal desc
PROFNO NAME POSITION WORKE SAL ETC ---------- ---------- -------------------- ----- ---------- ------------
9901 김도훈 교수 29.6 500 석좌교수후보
9905 권혁일 교수 26.0 450
9906 이만식 부교수 23.3 420
9908 남은혁 부교수 21.1 400
9904 염일웅 전임강사 13.1 240
9907 전은지 전임강사 10.6 210
9903 성연희 조교수 18.6 360
9902 이재우 조교수 16.7 320 8 rows selected. SQL> select name , height,
2 case when height >= 180 then 'A'
3 when height between 170 and 179 then 'B'
4 when height >=160 and height <= 169 then 'C'
5 else 'D'
6 end rank
7* from student NAME HEIGHT R ---------- ---------- - 전인하 176 B 이동훈 172 B 박미경 168 C 김영균 170 B 박동진 182 A 김진영 164 C 지은경 161 C 오유석 177 B 하나리 160 C 임유진 171 B 서재진 186 A 윤진욱 171 B 이광훈 175 B 김진경 166 C 조명훈 184 A 류민정 162 C 16 rows selected. SQL> select name , lower (userid)
2 from student
3* where length(userid)>=7 NAME LOWER ( USER ---------- ---------- 박미경 ansel414 임유진 youjin12 조명훈 rader214 류민정 cleansky SQL> select name , userid, to_char(to_date(substr(idnum, 1, 6), 'rr-mm-dd' ), 'yyyy-mm-dd' )
2 from student; NAME USERID TO_CHAR( TO ---------- ---------- ---------- 전인하 jun123 1979-07-02 이동훈 Dals 1983-12-10 박미경 ansel414 1984-05-16 김영균 mandu 1981-03-21 박동진 Ping2 1985-11-24 김진영 simply 1982-06-06 지은경 Gomo00 1980-04-12 오유석 yousuk 1977-09-12 하나리 hanal 1985-01-09 임유진 YouJin12 1983-01-21 서재진 seolly 1985-11-29 윤진욱 Samba7 1979-04-02 이광훈 huriky 1981-09-13 김진경 lovely 1983-02-28 조명훈 Rader214 1984-12-14 류민정 cleanSky 1981-08-19<p></p> <p>16 rows selected. SQL> select name , to_char(nvl2(profno, profno, 0), '0999' )
2 from student; NAME TO_CH ---------- ----- 전인하 9903 이동훈 0000 박미경 0000 김영균 9906 박동진 0000 김진영 9905 지은경 9907 오유석 9905 하나리 0000 임유진 9907 서재진 0000 윤진욱 9905 이광훈 9903 김진경 9902 조명훈 0000 류민정 9907 16 rows selected. SQL> select studno, name , deptno,
2 decode(mod(studno, 3), 0, 'A' ,
3 1, 'B' ,
4 2, 'C'
5 ) team
6 from student;
STUDNO NAME DEPTNO TEAM ---------- ---------- ---------- ----
10101 전인하 101 A
20101 이동훈 201 B
10102 박미경 101 B
10103 김영균 101 C
20102 박동진 201 C
10201 김진영 102 B
10104 지은경 101 A
10202 오유석 102 C
10203 하나리 102 A
10105 임유진 101 B
10106 서재진 101 C
10204 윤진욱 102 B
10107 이광훈 101 A
20103 김진경 201 A
20104 조명훈 201 B
10108 류민정 101 B 16 rows selected. SQL> select name , tel, decode(substr(tel, 1, instr(tel, ')' ,1)-1), '02' , '서울' ,
2 '051' , '부산' ,
3 '052' , '울산' ,
4 '053' , '대구' ,
5 'Etc' ) Loc
6 from student; NAME TEL LOC ---------- ------------- ---- 전인하 051)781-2158 부산 이동훈 055)426-1752 Etc 박미경 055)261-8947 Etc 김영균 051)824-9637 부산 박동진 051)742-6384 부산 김진영 055)419-6328 Etc 지은경 055)418-9627 Etc 오유석 051)724-9618 부산 하나리 055)296-3784 Etc 임유진 02)312-9838 서울 서재진 051)239-4861 부산 윤진욱 053)487-2698 대구 이광훈 055)736-4981 Etc 김진경 052)175-3941 울산 조명훈 02)785-6984 서울 류민정 055)248-3679 Etc 16 rows selected. SQL> select name , sal, to_char(round(sal*0.15+sal, 0), '999,999' ) r_sal,
2 to_char(trunc(sal*0.15+sal, 0), '999,999' ) t_sal
3 from professor
4* where to_char(hiredate, 'mm' ) between 1 and 3
5 / NAME SAL R_SAL T_SAL ---------- ---------- -------- -------- 권혁일 450 518 517 SQL> select name , hiredate, trunc((sysdate-hiredate)/30, 0) work_month
2 from professor
3 order by 3 desc ; NAME HIREDATE WORK_MONTH ---------- ------------ ---------- 김도훈 24-JUN-82 359 권혁일 08-JAN-86 316 이만식 13-SEP-88 283 남은혁 18-NOV-90 257 성연희 17-MAY-93 226 이재우 12-APR-95 203 염일웅 02- DEC -98 159 전은지 01-JUN-01 128 8 rows selected. SQL> select dname || '는 ' || loc
2 from department
3 where loc is not null ; DNAME|| '는' ||LOC ----------------------------- 컴퓨터공학과는 1호관 멀티미디어학과는 2호관 전자공학과는 3호관 기계공학과는 4호관 SQL> select ename, rpad(ename, 10, substr( '1234567890' , length(ename)+1,10))
2* from emp ENAME RPAD(ENAME,10,SUBSTR -------------------- -------------------- SMITH SMITH67890 ALLEN ALLEN67890 WARD WARD567890 JONES JONES67890 MARTIN MARTIN7890 BLAKE BLAKE67890 CLARK CLARK67890 SCOTT SCOTT67890 KING KING567890 TURNER TURNER7890 ADAMS ADAMS67890 JAMES JAMES67890 FORD FORD567890 MILLER MILLER7890 </p> |