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;
 
posted on 2012-04-18 17:43  千里烟波226  阅读(2187)  评论(0编辑  收藏  举报