发布日期:2015-11-06 13:38 来源: 标签: 数据库 oracle教程 oracle函数 oracle数字函数
本章我们主要学习Oracle中常用数字函数有哪些,如何使用这些数字函数?下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
数字函数
1、Round:四舍五入
Round(45.926,2)→45.93

2、Trunc:截断
Trunc(45.926,2)→45.92

3、Mod:求余
Mod(1600,300)→100
dual是一个"伪表",可以用来测试函数和表达式。
Round(45.923,0)保留整数位,结果是46。
Round(45.923,-1)取整数位的第二位。就是取十位,结果是50。
Round(45.923,-2)取整数位的第三位。就是取百位,结果为0。

4、日期
oracle中日期型数据实际含有2个值:日期和时间。默认的日期格式是DD-MON-RR.
查询系统时间:select sysdate from dual;
转化系统时间:select tochar(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
日期函数:MONTH_BETWEEN   两个日期相差的月数
     ADD_MONTHS   向指定日期中加上若干月数
     NEXT_DAY  指定日期的下一个日期
     LASTDAY 本月的最后一天
       ROUND  日期四舍五入
       TRUNC(日期截断)

字符控制函数
concat: 字符连接函数, 等同于  ||
select concat('Hello',' World') from dual;
substr:求母串中的某个子串
select substr('Hello World',3) from dual;
SUBSTR('H                                                                                                                                             
---------                                                                                                                                             
llo World    
select substr('Hello World',3,5) from dual;
SUBST                                                                                                                                                 
-----                                                                                                                                                 
llo W    
length和lengthb: 字符数和字节数
SQL> select length('China') 字符数, lengthb('China') 字节数  from dual;
    字符数     字节数                                                                                                                                 
---------- ----------                                                                                                                                 
         5          5                                                                                                                                 
select length('中国') 字符数, lengthb('中国') 字节数  from dual;
    字符数     字节数                                                                                                                                 
---------- ----------                                                                                                                                 
         2          4                                                                                                                                 
instr:在母串中,查找子串的位置
SQL> select instr('Hello World','ll') from dual;
INSTR('HELLOWORLD','LL')                                                                                                                              
------------------------                                                                                                                              
                      3                                                                                                                              
lpad,rpad: 左右填充
SQL> --将abcd用*填充到10位
SQL> select lpad('abcd',10,'*') 左填充, rpad('abcd',10,'*') 右填充 from dual;
 左填充     右填充                                                                                                                                     
---------- ----------                                                                                                                                 
******abcd abcd******                                                                                                                                 
trim: 去掉字符串前后指定的字符
SQL> select trim('H' from 'Hello WorldH') from dual;
TRIM('H'FR                                                                                                                                            
----------                                                                                                                                            
ello World     
replace:字符串替换函数
SQL> select replace('Hello Wordl','l','*') from dual;
 
REPLACE('HE                                                                                                                                           
-----------                                                                                                                                           
He**o Word*    
数字函数
SQL> select round(45.926,2) 四舍五入, trunc(45.926,2)  截断 ,mod(1600,300) 求于
  2  from dual;
  四舍五入       截断       求于                                                                                                                      
---------- ---------- ----------                                                                                                                      
     45.93      45.92        100                                                                                                                      
select round(45.923,0) 整数位, round(45.923,-1) 十位,round(45.923,-2) 百位 from dual;
 
    整数位       十位       百位                                                                                                                      
---------- ---------- ----------                                                                                                                      
        46         50          0                                                                                                                      
 
已选择 1 行。
显示时间部分
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY                                                                                                                                   
-------------------                                                                                                                                   
2011-09-17 14:29:17    
显示昨天,今天和明天
SQL> select sysdate-1 昨天, sysdate 今天, sysdate+1 明天 from dual;
昨天           今天           明天                                                                                                                    
-------------- -------------- --------------                                                                                                          
16-9月 -11     17-9月 -11     18-9月 -11                                                                                                              
两个日期相减,结果为相差的天数
SQL> --查询员工信息,显示员工工龄
SQL> select empno,ename, sysdate-hiredate 天 from emp;
查询员工信息,显示员工工龄,分别按照天,星期,月显示
SQL> select empno,ename,sysdate-hiredate 天,(sysdate-hiredate)/7 星期, (sysdate-hiredate)/30 月
  2  from emp;
months_between:两个日期相差的月数
SQL> select (sysdate-hiredate)/30 方式一, months_between(sysdate,hiredate) 方式二
  2  from emp;
select add_months(sysdate,1)  下个月, add_months(sysdate,123) "123个月后"
  2* from dual
SQL> /
下个月         123个月后                                                                                                                              
-------------- --------------                                                                                                                         
17-10月-11     17-12月-21  
last_day: 某个日期当月的最后一天
SQL> select last_day(sysdate) from dual;
next_day:下周六
SQL> select next_day(sysdate,'星期五') from dual;
对日期进行四舍五入
SQL> select round(sysdate,'MONTH')  月,round(sysdate,'YEAR') from dual;
对日期进行截断
SQL> select trunc(sysdate,'MONTH')  月,trunc(sysdate,'YEAR') from dual;
隐式转换的前提:被转换对象一定是可以转换的
SQL> select * from emp where hiredate=to_date('1982-01-23','yyyy-mm-dd');
日期格式
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
查询当前日期:显示:  2011-09-17 15:12:15今天是星期六
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;
查询员工信息,显示员工的编号,姓名,月薪,要求有货币代码,千位符,两位小数
SQL> --1600 -> 1,600.00
SQL> select empno,ename,to_char(sal,'L9,999.99') from emp;
通用函数
SQL> --nvl和nvl2
SQL> --nvl(exp1,exp2):当exp1为空时,返回exp2
SQL> --nvl2(exp1,exp2,exp3):当exp1为空时,返回exp3;否则返回exp2
SQL> --查询员工的年收入
SQL> select ename,sal*12+nvl2(comm,comm,0) 年收入
  2  from emp;
COALESCE :找到参数列表中,第一个不为空的值
SQL> select ename,comm,sal,COALESCE(comm,sal) from emp;
select ename,job,sal 涨前工资, case job when 'PRESIDENT' then sal+1000
  2                                          when 'MANAGER'   then sal+600
  3                                          else sal+400
  4                                 end 涨后工资
  5  from emp;
select ename,job,sal 涨前工资, decode(job,'PRESIDENT',sal+1000,
  2                                            'MANAGER',sal+600,
  3                                             sal+400) 涨后工资
  4  from emp;

相关评论

专题信息
    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;本教程主要是针对oracle应用过程中我们常用的函数进行深入讲解,让大家能够通过代码实例更快、更有效的掌握oracle函数,希望对大家有所帮助。