zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    Log4j.properties配置详解
    在Listener(监听器)定时启动的TimerTask(定时任务)中使用Spring@Service注解的bean
    Java定时任务:利用java Timer类实现定时执行任务的功能
    java关于Timer schedule执行定时任务 !!!!!!!!!
    java关于Timer schedule执行定时任务
    Cannot call sendRedirect() after the response has been committed错误;
    http status 301/302 & java重定向/转发
    jQuery判断checkbox是否选中的3种方法
    怎样从Mysql官网下载mysql.tar.gz版本的安装包
    (转)Nagios 配置及监控
  • 原文地址:https://www.cnblogs.com/ylw666/p/6853681.html
Copyright © 2011-2022 走看看