Oracle单行函数

SQL> --字符函数
SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写
  2  from dual;

转小写      转大写      首字母大写                                              
----------- ----------- -----------                                             
hello world HELLO WORLD Hello World                                             

SQL> --substr(a,b) 从a中,第b位开始取,取右边所有的字符
SQL> select substr('Hello World',4) 截取结果 from dual;
SQL> --substr(a,b,c) 从a中,第b位开始取,取c位
SQL> select substr('Hello World',4,4)  from dual;

SQL> --length 字符数 lengthb 字节数
SQL> select length('Hello World中国') 字符数, lengthb('Hello World中国') 字节数
  2  from dual;
SQL> --instr 在母串中查找子串,找到返回下标(从1开始),否则返回0
SQL> select instr('Hello World','ll')  from dual;

INSTR('HELLOWORLD','LL')                                                        
------------------------                                                        
                       3                                                        
SQL> --lpad 左填充  rpad 右填充
SQL> select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右
  2  from dual;

左         右                                                                   
---------- ----------                                                           
******abcd abcd******    
SQL> --trim 去掉前后指定的字符
SQL> select trim('H' from 'Hello WorldH') from dual;

TRIM('H'FR                                                                      
----------                                                                      
ello World                                                                      

SQL> select replace('Hello World','l','*') from dual;

REPLACE('HE                                                                     
-----------                                                                     
He**o Wor*d                                     

SQL> --数字函数
SQL> select ROUND(45.926, 2) 一,ROUND(45.926, 1) 二, ROUND(45.926, 0) 三,
  2         ROUND(45.926, -1) 四, ROUND(45.926, -2) 五
  3  from dual;

        一         二         三         四         五                          
---------- ---------- ---------- ---------- ----------                          
     45.93       45.9         46         50          0   
SQL> ed
已写入 file afiedt.buf

  1  select TRUNC(45.926, 2) 一,TRUNC(45.926, 1) 二, TRUNC(45.926, 0) 三,
  2         TRUNC(45.926, -1) 四, TRUNC(45.926, -2) 五
  3* from dual
SQL> /

        一         二         三         四         五                          
---------- ---------- ---------- ---------- ----------                          
     45.92       45.9         45         40          0      

SQL>select MOD(1600,300) from dual;

SQL> --日期函数
SQL> select sysdate from dual;

SYSDATE                                                                         
--------------                                                                  
22-10月-12                                                                      

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY                                                             
-------------------                                                             
2012-10-22 15:39:21                                                             

SQL> select systimestamp from dual;

SYSTIMESTAMP                                                                    
---------------------------------------------------------------------------     
22-10月-12 03.40.05.406000 下午 +08:00  

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY                                                             
-------------------                                                             
2012-10-22 15:40:33                                                             

SQL> select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') from dual;

TO_CHAR(SYSTIMESTAMP,'YYYY-MM                                                   
-----------------------------                                                   
2012-10-22 15:40:47*218000  
SQL> --systimestamp时间戳

SQL>---------------------------------------------------------------





SQL> --昨天 今天  明天
SQL> select (sysdate-1) 昨天, sysdate 今天, (sysdate+1) 明天 from dual;

昨天           今天           明天                                              
-------------- -------------- --------------                                    
21-10月-12     22-10月-12     23-10月-12     
SQL> --员工的工龄
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
  2         (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
  3  from emp;

ENAME      HIREDATE               天       星期         月         年           
---------- -------------- ---------- ---------- ---------- ----------           
SMITH      17-12月-80     11632.6571 1661.80815 387.755235 31.8702933           
ALLEN      20-2月 -81     11567.6571 1652.52244 385.588569 31.6922111           
WARD       22-2月 -81     11565.6571 1652.23672 385.521902 31.6867317           
JONES      02-4月 -81     11526.6571 1646.66529 384.221902 31.5798824           
MARTIN     28-9月 -81     11347.6571 1621.09387 378.255235 31.0894714           
BLAKE      01-5月 -81     11497.6571 1642.52244 383.255235 31.5004303           
CLARK      09-6月 -81     11458.6571 1636.95101 381.955235  31.393581           
SCOTT      13-7月 -87     9233.65706 1319.09387 307.788569 25.2976906           
KING       17-11月-81     11297.6571 1613.95101 376.588569 30.9524851           
TURNER     08-9月 -81     11367.6571 1623.95101 378.921902 31.1442659           
ADAMS      13-7月 -87     9233.65706 1319.09387 307.788569 25.2976906           

ENAME      HIREDATE               天       星期         月         年           
---------- -------------- ---------- ---------- ---------- ----------           
JAMES      03-12月-81     11281.6571 1611.66529 376.055235 30.9086495           
FORD       03-12月-81     11281.6571 1611.66529 376.055235 30.9086495           
MILLER     23-1月 -82     11230.6571 1604.37958 374.355235 30.7689235           

已选择14行。
SQL> select hiredate+sysdate from emp;
select hiredate+sysdate from emp
               *
第 1 行出现错误: 
ORA-00975: 不允许日期 + 日期 
SQL>-- 时间不允许相加

SQL> --last_day 某月的最后一天

SQL> select last_day(sysdate) from dual;	 
	 
	 
SQL> --MONTHS_BETWEEN 计算工龄
SQL> select (sysdate-hiredate)/30 一,MONTHS_BETWEEN(sysdate,hiredate) 二
  2  from emp;

        一         二                                                           
---------- ----------                                                           
387.755329 382.182577                                                           
385.588662 380.085802                                                           
385.521996        380                                                           
384.221996 378.666448                                                           
378.255329 372.827738                                                           
383.255329 377.698706                                                           
381.955329 376.440641                                                           
307.788662 303.311609                                                           
376.588662 371.182577                                                           
378.921996 373.472899                                                           
307.788662 303.311609                                                           

        一         二                                                           
---------- ----------                                                           
376.055329 370.634189                                                           
376.055329 370.634189                                                           
374.355329 368.989028                                                           

已选择14行。
SQL> --114月后
SQL> select add_months(sysdate,114) from dual;
SQL> --从今天开始算(2012.10.22星期一),下一个星期一
SQL> select next_day(sysdate,'星期一') from dual;

NEXT_DAY(SYSDA                                                                  
--------------                                                                  
29-10月-12                                                                      
SQL> --从今天开始算(2012.10.22星期一),下一个星期二
SQL> select next_day(sysdate,'星期二') from dual;

NEXT_DAY(SYSDA                                                                  
--------------                                                                  
23-10月-12    


SQL> --对日期进行四舍五入
SQL> select round(sysdate,'month') 一,round(sysdate,'year') 二 from dual;

SQL> --数据类型转换
SQL> --隐式转换的前提: 被转换对象是可以转换的
SQL> --显式转换
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;

SQL> --查询员工的薪水: 货币符号,两位小数,千位符
SQL> select sal, to_char(sal,'L9,999.99') from emp;



SQL> --通用函数
SQL> --nvl2(a,b,c) 当a=null时,返回c,否则返回b
SQL> select sal*12+nvl2(comm,comm,0)  from emp;

SQL> --nullif(a,b) 当a=b时,返回null,否则返回a
SQL> select nullif('abc','abc') from dual;
SQL> --COALESCE 从左至右找到第一个不为null的值
SQL> select comm,sal,COALESCE(comm,sal) from emp;

在SQL中使用if  then else 语句

SQL99-case语句

decode函数 oracle数据库特有的函数

SQL> --根据职位涨工资 总裁1000 经理800 其他400
SQL> select ename,job,sal 涨前薪水, case job when 'PRESIDENT' then sal+1000
  2                                          when 'MANAGER' then sal+800
  3                                          else sal+400
  4                                 end 涨后薪水
  5  from emp;

SQL> select ename,job,sal 涨前薪水,decode(job,'PRESIDENT',sal+1000,
  2                                           'MANAGER', sal+800,
  3                                                      sal+400)涨后薪水
  4  from emp;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值