oracle单行函数

来源:互联网 发布:韩璐璐淘宝 编辑:程序博客网 时间:2024/05/16 10:10
单行函数主要分为以下5类:字符函数、数字函数、日期函数、转换函数、通用函数;


1、字符函数
   UPPER(字符串|列)
   LOWER(字符串|列)
   INITCAP(字符串|列)
   LENGTH(字符串|列):开头首字母大写
   REPLACE(字符串|列)
   SUBSTR(字符串|列,开始点[结束点]):字符串截取


oracle数据库中为了用户的查询方便,所以专门提供了一个“dual"的虚拟表。


大小写
select upper('hello')from dual;
select lower('HELLO')from dual;


select *from emp where ename=upper('&str');
select lower(ename) from emp ;
select INITCAP(ename) from emp ;


长度
select ename,LENGTH(ename) from emp ;
select ename,LENGTH(ename) from emp 
where LENGTH(ename)=5;


替换
select REPLACE(ename,'A','_') from emp ;


截取


select ename, SUBSTR(ename,1,3) from emp ;


截取每个雇员姓名对的后3个字母。
select ename, SUBSTR(ename,LENGTH(ename)-2) from emp ;
select ename, SUBSTR(ename,-3) from emp ;


substr()函数截取的时候下标是从0还是从1开始?


      答:在Oracle 数据库之中,substr()函数从0和1开始都是一样的。
substr()也可以设置为负数,表示由后指定截取的开始点:


2、数字函数
   一共3个:
round(数字|列[保留小数的位数]):四舍五入的操作;
trunc(数字|列[保留小数的位数]):舍弃指定位置的内容;
mod(数字|数字2):取模,取余数;




select round(903.5)from dual;
select round(903.53567)from dual;


select round(903.53567),round(-903.53567), round(903.53567,-1),round(903.53567,2)from dual;




select trunc(903.53567),trunc(-903.53567), trunc(903.53567,-1),trunc(903.53567,2)from dual;


select mod(10,3)from dual;
  
3、日期函数


  取当前日期:
select sysdate from dual;
  日期计算:
日期+数字=日期  ----表示若干天后的日期
日期-数字=日期  ----表示若干天前的日期
日期-日期=数字  ----表示两个日期间的天数
select sysdate-3,sysdate+30 from dual;


select ename,sysdate-hiredate from emp;


LAST_DAY(日期):   求出指定日期的最后一天;
NEXT_DAY(日期,星期数);   求出下一个指定星期X的日期;
ADD_MONTHS(日期,数字);  求出若干月之后的日期:
MONTHS_BETWEEN(日期1,日期2);  求出两个日期之间所经历的月份;


求出本月的最后一天
select LAST_DAY(sysdate) from dual;


求出下一个周一
select NEXT_DAY(sysdate,'星期一') from dual;


求出你们学习的最晚时间
select ADD_MONTHS(sysdate,4) from dual;


求出每个雇员到今天为止的雇佣月份


select ename,hiredate,trunc(MONTHS_BETWEEN(sysdate,hiredate))from emp;




在所有的开发之中,如果是日期的操作,建议使用以上的函数,因为这些函数可以避免闰年的问题。


4、转换函数(核心)


   转换函数的主要功能是完成 数字(NUMBER) 、字符串(VARCHAR)、日期(DATE)几种数据间的互相转换的操作
一共三种转换函数:


TO_CHAR(字符串 |列,格式字符串);      将日期或者是数字变为字符串显示;
TO_DATE(字符串,格式字符串);将字符串变为DATE的数据显示;
TO_NUMBER(字符串);将字符变为数字显示;
   


---4.1
TO_CHAR()函数

select TO_CHAR(sysdate,'yyyy-mm-dd'),TO_CHAR(sysdate,'yyyy') year,TO_CHAR(sysdate,'mm') months, TO_CHAR(sysdate,'dd') day from dual;




select TO_CHAR(sysdate,'fmyyyy-mm-dd') from dual;
select TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;


        使用TO_CHAR()函数后,所有内容都是字符串,不再是DATE型数据,TO_CHAR()函数也
可以用于数字格式化上。这个时候每一个“9”表示一位数字的概念,而不是数字9的概念。


select TO_CHAR(847387483748,'999,999,999,999,999')from dual;


其中字母“L”,表示的是"Locale"的含义,即:当前的所在语言环境下的货币符号
select TO_CHAR(847387483748,'L999,999,999,999,999')from dual;


----4.2 TO_DATE()函数


        此函数的主要功能是将一个字符串变为DATE型数据。
select TO_DATE('1989-09-12','yyyy-mm-dd')from dual;
        
一般此函数在更新数据库的使用较多;




-----4、3 TO_NUMBER()函数:基本不用
TO_NUMBER()函数一看就知道是将字符串变数字。


select TO_NUMBER('1')+TO_NUMBER('2')from dual;

select '1'+'2'from dual;


5、通用函数(核心)

通用函数主要有两个:NVL()、DECODE(),这两个函数算是oracle自己的特色了:


1、NVL()函数,处理null


  示例:要求查询出每个雇员的全部年薪
  select ename,sal,comm,(sal+comm)*12 from emp;


  select ename,sal,comm,(sal+comm)*12 ,NVL(comm,0) from emp;


2、DECODE()函数:多值判断


DECODE()函数非常类似于程序中的if else语句,唯一不同的DECODE()函数判断的是数值,而不是


   逻辑条件了,例如,现在要求显示全部雇员的职位,但是这些职位要求替换为中文显示:

   例如,现在要求显示全部雇员的职位,但是这这些职位要求替换为中文:


CLERK:办事员;
SALESMAN:销售;
MANAGER:经理;
ANALYST:分析员;
PRESIDENT:总裁;
   
  DECODE(数值|列,判断值1,显示值1,判断值2,显示值2,判断值3,显示值3....) 




  select empno,ename,job,DECODE(job,'CLERK','办事员','SALESMAN','销售人员',
'MANAGER','经理','ANALYST','分析员','PRESIDENT','总裁')
  from emp;







原创粉丝点击