当前位置:Gxlcms > 数据库问题 > oracle sql单行函数 常用函数实例

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

时间:2021-07-01 10:21:17 帮助过:19人阅读

--一、单列函数 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:\tempfile\oracle\input.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
                        
                    

人气教程排行