DB/Oracle Basic

SQL 함수(일반 함수)

soccerda 2012. 7. 6. 01:02
반응형
 

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>
반응형

'DB > Oracle Basic' 카테고리의 다른 글

SQL 문법( Join - 1 )  (0) 2012.07.06
SQL 함수(그룹 함수)  (0) 2012.07.06
SQL 함수(날짜 함수)  (0) 2012.07.06
SQL 함수(숫자 함수)  (0) 2012.07.06
SQL 함수(문자열)  (0) 2012.07.06