oracle sql单行函数 常用函数实例

无结果函数

  1 --一、单列函数
  2     --1.字符串函数        
  3         --将字符串大写,因为emp表里面有15条数据,所以
  4         select upper('hello world') from emp;
  5         select lower(ename) from emp  where ename='SCOTT';
  6         --dual表中只用一行一列,可以用来测试函数
  7         --inintcap是让单词的首字母大写,后面的都是小写
  8         select initcap('hello world') from  dual;
  9         select initcap('HELLO WORLD') from  dual;
 10 
 11         select concat('hello', ' world') from dual;
 12         --concat函数的嵌套
 13         select concat(concat('ylw',' love'),' shagou') from dual;
 14 
 15         --substr(char,[m,[n]]) 字符串的开始坐标为1,从m开始截取n长度,
 16         --当m=0 不会显示数组越界,还是从1开始,如果m<0则是从字符串尾部开始截取
 17         select substr('1234567',3,3) from dual;
 18         select substr('1234567890',-3,3) from dual;
 19 
 20         select length('12345') from dual;
 21 
 22         --instr(char1,char2,[n[,m]]);在char1中搜索char2,从char1中的n开始,重复m次,返回符合条件的首字符位置
 23         select instr('123456789','4',3,1) from dual;
 24 
 25         --补位函数lpad(char1,n,char2) rpad() 在char1的左边或者右边用char2补齐,直到长度为n
 26         select ename, lpad(sal,10, '$$') sal from emp where deptno='10';
 27 
 28         --截取字串 trim(c2 from c1) ltrim(c1,c2) rtrim(c1,c2) 把全部的c2从c1的两头截取出去,c2只能是一个字符,
 29         select trim('a' from 'aaabbbaaa') from dual;
 30         select ltrim('aaabbbaaa','a') from dual;
 31         select rtrim('aaabbbaaa','a') from dual;
 32 
 33         --replace(char,search_string[,replace_String]) 把search_string 替换为replace_string
 34         select replace('ylw love shagou','shagou','zhunaodai') from dual;
 35 
 36         --ascii(char) chr(n) ascii码中的字符和数字转换
 37         select ascii('A') from dual;
 38         --把ASCII列的长度设置为5
 39         column ASCII format a5
 40         select chr(65) ASCII from dual ;
 41     --2.数字函数
 42         --round(n[,m]) m>0四舍五入到小数点后m位,m<0四舍五入到小数点前m位
 43         select round(45.555,2) from dual;
 44 
 45         --ceil(n) floor(n) 取整,ceil: n-(int)n>0?n+1:(int)n
 46         select ceil(1.1) from dual;
 47         --abs(n) mod(n,m)==>取余 power(n,m) sqrt(n);
 48     --3.日期函数
 49         --sysdate 当前系统时间
 50         select sysdate from dual;
 51         --日期转换
 52         select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') today from dual;
 53         --修改日期
 54         select add_months(SYSDATE,10) from dual;
 55         --查找下一个周几日期  
 56         --中文环境下使用'星期三' 每个星期是从星期日开始 对应数字1, 所以星期三对应的是4
 57         select next_day(SYSDATE,'星期三') next_wednesday from dual;
 58         select next_day(SYSDATE,4) next_wednesday from dual;
 59         --当月的最后一天
 60         select last_day(SYSDATE) from dual;
 61         --两个日期之间差了多少月
 62         select ename, job, months_between(sysdate, hiredate) hiredate from emp where deptno ='10';
 63 
 64         --extract(date from datetime) 从datetime中提取数据
 65         select extract(year from sysdate) current_year from dual;
 66 
 67     --4.转换函数
 68         select to_char(sysdate,'YYYY"年"MM"月"DD"日"') current_time from dual ;
 69         --数字到字符串,9可以替代任何单一数字,S表示正负号,0表示用0补齐,B加空格
 70         select to_char(12345.789,'S99,999.999') from dual;
 71         select to_char(123456.789,'S999,999.9990') from dual;
 72 
 73         select to_date('2017-05-14','YYYY-MM-DD') current_time from dual;
 74         --也可以设置数字格式 to_number(char[,fmt]);
 75         select to_number('2014') from dual;
 76     --5.null函数
 77         --coalesce(expr1[,expr2[,expr3......]]) 返回第一个非null表达式的值
 78         select coalesce(null,null,null,sysdate) from dual;
 79         select ename, sal, comm, sal+nvl(comm,0) total from emp;
 80 
 81     --6.比较函数
 82         select greatest('doctor','rose', 'martha') from dual;
 83         select least('doctor','rose', 'martha') from dual;
 84     --7.环境标识
 85         --sys_context(context,attribute)   获取环境变量
 86         select sys_context('userenv','session_user') context from dual;
 87         --user 是关键字
 88         select user from dual;
 89     --8.其它函数
 90         --decode(expr, search1,result1[,search2,result2.....][,default]) 类似于which语法
 91         select ename, job, sal, decode(job,'MANAGER',sal*1.2,
 92                                             'ANALYST',sal*1.3,
 93                                             'SALESMAN',sal*1.1,
 94                                             sal
 95         ) bonus from emp;
 96 
 97         --vsize(expr) 存储的实际字节数  
 98         select vsize('中国') from dual;
 99 
100         --dump(expr,return_fmt)  return_fmt是几进制输出
101         select dump('ABC',10) from dual;
102         select dump('傻狗',16) from dual;

上述所有函数的结果集和函数

  1 SQL> @ d:	empfileoracleinput.txt;
  2 SQL> --一、单列函数
  3 SQL>          --1.字符串函数
  4 SQL>              --将字符串大写,因为emp表里面有15条数据,所以
  5 SQL>              select upper('hello world') from emp;
  6 
  7 UPPER('HELL                                                                                         
  8 -----------                                                                                         
  9 HELLO WORLD                                                                                         
 10 HELLO WORLD                                                                                         
 11 HELLO WORLD                                                                                         
 12 HELLO WORLD                                                                                         
 13 HELLO WORLD                                                                                         
 14 HELLO WORLD                                                                                         
 15 HELLO WORLD                                                                                         
 16 HELLO WORLD                                                                                         
 17 HELLO WORLD                                                                                         
 18 HELLO WORLD                                                                                         
 19 HELLO WORLD                                                                                         
 20 HELLO WORLD                                                                                         
 21 HELLO WORLD                                                                                         
 22 HELLO WORLD                                                                                         
 23 HELLO WORLD                                                                                         
 24 
 25 已选择15行。
 26 
 27 已用时间:  00: 00: 00.00
 28 SQL>              select lower(ename) from emp  where ename='SCOTT';
 29 
 30 LOWER(ENAM                                                                                          
 31 ----------                                                                                          
 32 scott                                                                                               
 33 
 34 已用时间:  00: 00: 00.00
 35 SQL>              --dual表中只用一行一列,可以用来测试函数
 36 SQL>              --inintcap是让单词的首字母大写,后面的都是小写
 37 SQL>              select initcap('hello world') from  dual;
 38 
 39 INITCAP('HE                                                                                         
 40 -----------                                                                                         
 41 Hello World                                                                                         
 42 
 43 已用时间:  00: 00: 00.00
 44 SQL>              select initcap('HELLO WORLD') from  dual;
 45 
 46 INITCAP('HE                                                                                         
 47 -----------                                                                                         
 48 Hello World                                                                                         
 49 
 50 已用时间:  00: 00: 00.00
 51 SQL> 
 52 SQL>              select concat('hello', ' world') from dual;
 53 
 54 CONCAT('HEL                                                                                         
 55 -----------                                                                                         
 56 hello world                                                                                         
 57 
 58 已用时间:  00: 00: 00.00
 59 SQL>              --concat函数的嵌套
 60 SQL>              select concat(concat('ylw',' love'),' shagou') from dual;
 61 
 62 CONCAT(CONCAT('                                                                                     
 63 ---------------                                                                                     
 64 ylw love shagou                                                                                     
 65 
 66 已用时间:  00: 00: 00.00
 67 SQL> 
 68 SQL>              --substr(char,[m,[n]]) 字符串的开始坐标为1,从m开始截取n长度,
 69 SQL>              --当m=0 不会显示数组越界,还是从1开始,如果m<0则是从字符串尾部开始截取
 70 SQL>              select substr('1234567',3,3) from dual;
 71 
 72 SUB                                                                                                 
 73 ---                                                                                                 
 74 345                                                                                                 
 75 
 76 已用时间:  00: 00: 00.00
 77 SQL>              select substr('1234567890',-3,3) from dual;
 78 
 79 SUB                                                                                                 
 80 ---                                                                                                 
 81 890                                                                                                 
 82 
 83 已用时间:  00: 00: 00.00
 84 SQL> 
 85 SQL>              select length('12345') from dual;
 86 
 87 LENGTH('12345')                                                                                     
 88 ---------------                                                                                     
 89               5                                                                                     
 90 
 91 已用时间:  00: 00: 00.00
 92 SQL> 
 93 SQL>              --instr(char1,char2,[n[,m]]);在char1中搜索char2,从char1中的n开始,重复m次,返回符合条件的首字符位置
 94 SQL>              select instr('123456789','4',3,1) from dual;
 95 
 96 INSTR('123456789','4',3,1)                                                                          
 97 --------------------------                                                                          
 98                          4                                                                          
 99 
100 已用时间:  00: 00: 00.00
101 SQL> 
102 SQL>              --补位函数lpad(char1,n,char2) rpad() 在char1的左边或者右边用char2补齐,直到长度为n
103 SQL>              select ename, lpad(sal,10, '$$') sal from emp where deptno='10';
104 
105 ENAME      SAL                                                                                      
106 ---------- --------------------                                                                     
107 CLARK      $$$$$$2450                                                                               
108 KING       $$$$$$5000                                                                               
109 MILLER     $$$$$$1300                                                                               
110 
111 已用时间:  00: 00: 00.00
112 SQL> 
113 SQL>              --截取字串 trim(c2 from c1) ltrim(c1,c2) rtrim(c1,c2) 把全部的c2从c1的两头截取出去,c2只能是一个字符,
114 SQL>              select trim('a' from 'aaabbbaaa') from dual;
115 
116 TRI                                                                                                 
117 ---                                                                                                 
118 bbb                                                                                                 
119 
120 已用时间:  00: 00: 00.00
121 SQL>              select ltrim('aaabbbaaa','a') from dual;
122 
123 LTRIM(                                                                                              
124 ------                                                                                              
125 bbbaaa                                                                                              
126 
127 已用时间:  00: 00: 00.00
128 SQL>              select rtrim('aaabbbaaa','a') from dual;
129 
130 RTRIM(                                                                                              
131 ------                                                                                              
132 aaabbb                                                                                              
133 
134 已用时间:  00: 00: 00.00
135 SQL> 
136 SQL>              --replace(char,search_string[,replace_String]) 把search_string 替换为replace_string
137 SQL>              select replace('ylw love shagou','shagou','zhunaodai') from dual;
138 
139 REPLACE('YLWLOVESH                                                                                  
140 ------------------                                                                                  
141 ylw love zhunaodai                                                                                  
142 
143 已用时间:  00: 00: 00.00
144 SQL> 
145 SQL>              --ascii(char) chr(n) ascii码中的字符和数字转换
146 SQL>              select ascii('A') from dual;
147 
148 ASCII('A')                                                                                          
149 ----------                                                                                          
150         65                                                                                          
151 
152 已用时间:  00: 00: 00.00
153 SQL>              --把ASCII列的长度设置为5
154 SQL>              column ASCII format a5
155 SQL>              select chr(65) ASCII from dual ;
156 
157 ASCII                                                                                               
158 -----                                                                                               
159 A                                                                                                   
160 
161 已用时间:  00: 00: 00.00
162 SQL>          --2.数字函数
163 SQL>              --round(n[,m]) m>0四舍五入到小数点后m位,m<0四舍五入到小数点前m位
164 SQL>              select round(45.555,2) from dual;
165 
166 ROUND(45.555,2)                                                                                     
167 ---------------                                                                                     
168           45.56                                                                                     
169 
170 已用时间:  00: 00: 00.00
171 SQL> 
172 SQL>              --ceil(n) floor(n) 取整,ceil: n-(int)n>0?n+1:(int)n
173 SQL>              select ceil(1.1) from dual;
174 
175  CEIL(1.1)                                                                                          
176 ----------                                                                                          
177          2                                                                                          
178 
179 已用时间:  00: 00: 00.00
180 SQL>              --abs(n) mod(n,m)==>取余 power(n,m) sqrt(n);
181 SQL>          --3.日期函数
182 SQL>              --sysdate 当前系统时间
183 SQL>              select sysdate from dual;
184 
185 SYSDATE                                                                                             
186 --------------                                                                                      
187 14-5月 -17                                                                                          
188 
189 已用时间:  00: 00: 00.00
190 SQL>              --日期转换
191 SQL>              select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') today from dual;
192 
193 TODAY                                                                                               
194 -------------------                                                                                 
195 2017-05-14 20:27:41                                                                                 
196 
197 已用时间:  00: 00: 00.00
198 SQL>              --修改日期
199 SQL>              select add_months(SYSDATE,10) from dual;
200 
201 ADD_MONTHS(SYS                                                                                      
202 --------------                                                                                      
203 14-3月 -18                                                                                          
204 
205 已用时间:  00: 00: 00.00
206 SQL>              --查找下一个周几日期
207 SQL>              --中文环境下使用'星期三' 每个星期是从星期日开始 对应数字1, 所以星期三对应的是4
208 SQL>              select next_day(SYSDATE,'星期三') next_wednesday from dual;
209 
210 NEXT_WEDNESDAY                                                                                      
211 --------------                                                                                      
212 17-5月 -17                                                                                          
213 
214 已用时间:  00: 00: 00.00
215 SQL>              select next_day(SYSDATE,4) next_wednesday from dual;
216 
217 NEXT_WEDNESDAY                                                                                      
218 --------------                                                                                      
219 17-5月 -17                                                                                          
220 
221 已用时间:  00: 00: 00.00
222 SQL>              --当月的最后一天
223 SQL>              select last_day(SYSDATE) from dual;
224 
225 LAST_DAY(SYSDA                                                                                      
226 --------------                                                                                      
227 31-5月 -17                                                                                          
228 
229 已用时间:  00: 00: 00.00
230 SQL>              --两个日期之间差了多少月
231 SQL>              select ename, job, months_between(sysdate, hiredate) hiredate from emp where deptno ='10';
232 
233 ENAME      JOB         HIREDATE                                                                     
234 ---------- --------- ----------                                                                     
235 CLARK      MANAGER   431.188792                                                                     
236 KING       PRESIDENT 425.930728                                                                     
237 MILLER     CLERK     423.737179                                                                     
238 
239 已用时间:  00: 00: 00.00
240 SQL> 
241 SQL>              --extract(date from datetime) 从datetime中提取数据
242 SQL>              select extract(year from sysdate) current_year from dual;
243 
244 CURRENT_YEAR                                                                                        
245 ------------                                                                                        
246         2017                                                                                        
247 
248 已用时间:  00: 00: 00.00
249 SQL> 
250 SQL>          --4.转换函数
251 SQL>              select to_char(sysdate,'YYYY"年"MM"月"DD"日"') current_time from dual ;
252 
253 CURRENT_TIME                                                                                        
254 --------------                                                                                      
255 2017年05月14日                                                                                      
256 
257 已用时间:  00: 00: 00.00
258 SQL>              --数字到字符串,9可以替代任何单一数字,S表示正负号,0表示用0补齐,B加空格
259 SQL>              select to_char(12345.789,'S99,999.999') from dual;
260 
261 TO_CHAR(123                                                                                         
262 -----------                                                                                         
263 +12,345.789                                                                                         
264 
265 已用时间:  00: 00: 00.00
266 SQL>              select to_char(123456.789,'S999,999.9990') from dual;
267 
268 TO_CHAR(12345                                                                                       
269 -------------                                                                                       
270 +123,456.7890                                                                                       
271 
272 已用时间:  00: 00: 00.00
273 SQL> 
274 SQL>              select to_date('2017-05-14','YYYY-MM-DD') current_time from dual;
275 
276 CURRENT_TIME                                                                                        
277 --------------                                                                                      
278 14-5月 -17                                                                                          
279 
280 已用时间:  00: 00: 00.00
281 SQL>              --也可以设置数字格式 to_number(char[,fmt]);
282 SQL>              select to_number('2014') from dual;
283 
284 TO_NUMBER('2014')                                                                                   
285 -----------------                                                                                   
286              2014                                                                                   
287 
288 已用时间:  00: 00: 00.00
289 SQL>          --5.null函数
290 SQL>              --coalesce(expr1[,expr2[,expr3......]]) 返回第一个非null表达式的值
291 SQL>              select coalesce(null,null,null,sysdate) from dual;
292 
293 COALESCE(NULL,                                                                                      
294 --------------                                                                                      
295 14-5月 -17                                                                                          
296 
297 已用时间:  00: 00: 00.00
298 SQL>              select ename, sal, comm, sal+nvl(comm,0) total from emp;
299 
300 ENAME             SAL       COMM      TOTAL                                                         
301 ---------- ---------- ---------- ----------                                                         
302 SMITH             800                   800                                                         
303 ALLEN            1600        300       1900                                                         
304 WARD             1250        500       1750                                                         
305 JONES            2975                  2975                                                         
306 MARTIN           1250       1400       2650                                                         
307 BLAKE            2850                  2850                                                         
308 CLARK            2450                  2450                                                         
309 SCOTT            3000                  3000                                                         
310 KING             5000                  5000                                                         
311 TURNER           1500          0       1500                                                         
312 ADAMS            1100                  1100                                                         
313 JAMES             950                   950                                                         
314 FORD             3000                  3000                                                         
315 MILLER           1300                  1300                                                         
316 JOHN_SMITH                                                                                          
317 
318 已选择15行。
319 
320 已用时间:  00: 00: 00.00
321 SQL> 
322 SQL>          --6.比较函数
323 SQL>              select greatest('doctor','rose', 'martha') from dual;
324 
325 GREA                                                                                                
326 ----                                                                                                
327 rose                                                                                                
328 
329 已用时间:  00: 00: 00.00
330 SQL>              select least('doctor','rose', 'martha') from dual;
331 
332 LEAST(                                                                                              
333 ------                                                                                              
334 doctor                                                                                              
335 
336 已用时间:  00: 00: 00.00
337 SQL>          --7.环境标识
338 SQL>              --sys_context(context,attribute)    获取环境变量
339 SQL>              select sys_context('userenv','session_user') context from dual;
340 
341 CONTEXT                                                                                             
342 ----------------------------------------------------------------------------------------------------
343 SCOTT                                                                                               
344 
345 已用时间:  00: 00: 00.00
346 SQL>              --user 是关键字
347 SQL>              select user from dual;
348 
349 USER                                                                                                
350 ------------------------------                                                                      
351 SCOTT                                                                                               
352 
353 已用时间:  00: 00: 00.00
354 SQL>          --8.其它函数
355 SQL>              --decode(expr, search1,result1[,search2,result2.....][,default]) 类似于which语法
356 SQL>              select ename, job, sal, decode(job,'MANAGER',sal*1.2,
357   2                                                   'ANALYST',sal*1.3,
358   3                                                   'SALESMAN',sal*1.1,
359   4                                                   sal
360   5               ) bonus from emp;
361 
362 ENAME      JOB              SAL      BONUS                                                          
363 ---------- --------- ---------- ----------                                                          
364 SMITH      CLERK            800        800                                                          
365 ALLEN      SALESMAN        1600       1760                                                          
366 WARD       SALESMAN        1250       1375                                                          
367 JONES      MANAGER         2975       3570                                                          
368 MARTIN     SALESMAN        1250       1375                                                          
369 BLAKE      MANAGER         2850       3420                                                          
370 CLARK      MANAGER         2450       2940                                                          
371 SCOTT      ANALYST         3000       3900                                                          
372 KING       PRESIDENT       5000       5000                                                          
373 TURNER     SALESMAN        1500       1650                                                          
374 ADAMS      CLERK           1100       1100                                                          
375 JAMES      CLERK            950        950                                                          
376 FORD       ANALYST         3000       3900                                                          
377 MILLER     CLERK           1300       1300                                                          
378 JOHN_SMITH                                                                                          
379 
380 已选择15行。
381 
382 已用时间:  00: 00: 00.00
383 SQL> 
384 SQL>              --vsize(expr) 存储的实际字节数
385 SQL>              select vsize('中国') from dual;
386 
387 VSIZE('中国')                                                                                       
388 -------------                                                                                       
389             4                                                                                       
390 
391 已用时间:  00: 00: 00.00
392 SQL> 
393 SQL>              --dump(expr,return_fmt)  return_fmt是几进制输出
394 SQL>              select dump('ABC',10) from dual;
395 
396 DUMP('ABC',10)                                                                                      
397 ----------------------                                                                              
398 Typ=96 Len=3: 65,66,67                                                                              
399 
400 已用时间:  00: 00: 00.00
401 SQL>              select dump('傻狗',16) from dual;
402 
403 DUMP('傻狗',16)                                                                                     
404 -------------------------                                                                           
405 Typ=96 Len=4: c9,b5,b9,b7                                                                           
406 
407 已用时间:  00: 00: 00.00
408 SQL> 
409 SQL> 
410 SQL> 
411 SQL> 
412 SQL> SQL> spool off;
原文地址:https://www.cnblogs.com/ylw666/p/6853681.html