oracle sql单行函数 常用函数实例
Posted 冷漠脸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:\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‘; 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;
以上是关于oracle sql单行函数 常用函数实例的主要内容,如果未能解决你的问题,请参考以下文章