`

原创:oralce中单行记录函数介绍 <五>

阅读更多
    在SQL中有两种函数一种是单行函数,一种是多行函数.在sql与pl/sql中都自带了很多类型的函数,比如有字符、数字、日期、转换和混合型等多种函数用于处理单行数据,因此这些都被称为单行函数.这些函数都可以被用于select、where和oder by等子句中.下面我们就来分析单行函数,在这里我列举了oracle中一些常用的单行函数进行操作.希望你所有收获.
1、字符串函数是oracle使用最广泛的一种函数.
LOWER:小写
UPPER:大写
INITCAP:首字母大写
CONCAT:连接
SUBSTR:截取  (参数,开始,数目)
LENGTH:返回字符串的长度
INSTR:(参数,字母) 返回字母出现的位置
LPAD:(参数,长度,在前补齐参数字母) 
| RPAD:(参数,长度,在后补齐参数字母)
TRIM :
REPLACE:(参数,参数[,参数]):第一个参数操作数,第二是要查找的字符,第三个是替换的字符,如果没有第三个就删除查找的字符。
//查询名称为scott的员工信息 (不区分大小写)
SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp  where lower(ename)='scott';
SQL> select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp  where upper(ename)='SCOTT';
//查询员工信息 把员工名称与工作连接在一起
SQL> select empno,concat(ename,job),mgr,hiredate,sal,comm,deptno from emp;
//查询员工信息 把员工名称与工作连接在一起
   SQL> select empno,concat(ename||'is work:',job),mgr,hiredate,sal,comm,deptno from emp;
//查询员工名称中含有O字符的位置
SQL> select empno,instr(ename,'O'),job,mgr,hiredate,sal,comm,deptno from emp;
//查询员工名称中含有O字符的位置并且求出了员工名称字符长度
SQL> select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp;
//在查询上面结果中过滤出员工工作从第三字母开始为ERK员工信息 
SQL> select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3)='ERK';
备注:当含有两个参数的时候,从开始位置直接到参数结束的结束为止
//在效果同上的同时指明了截取个数为3
 SQL> select empno,instr(ename,'O'),length(ename),job,mgr,hiredate,sal,comm,deptno from emp where substr(job,3,3)='ERK';
//查询员工信息  薪资是10位位数不够在左部分补*填充
SQL> select empno,ename,job,mgr,hiredate,LPAD(sal,10,'*'),comm,deptno from emp;
//查询员工信息  薪资是10位位数不够在右部分补*填充
SQL> select empno,ename,job,mgr,hiredate,RPAD(sal,10,'*'),comm,deptno from emp;
//查询员工信息  把员工名称中含有S字符去除掉
SQL> select empno,TRIM('S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
等效于:
SQL> select empno,TRIM( both 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
//查询员工信息  把员工名称中前面有S字符去除掉
SQL> select empno,TRIM( Leading 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
//等效于
SQL> select empno,LTRIM( ename,'S'),job,mgr,hiredate,10,comm,deptno from emp;
//查询员工信息  把员工名称中后面有S字符去除掉
SQL> select empno,TRIM( trailing 'S' from ename),job,mgr,hiredate,10,comm,deptno from emp;
等效于:
SQL> select empno,RTRIM( ename,'S'),job,mgr,hiredate,10,comm,deptno from emp;


2、数字函数:
ROUND: 四舍五入 
            ROUND(45.926, 2)			45.93 
TRUNC:	 截断 
            TRUNC(45.926, 2)			45.92
MOD: 求余 
            MOD(1600, 300)			100
ABS:绝对值
CEIL:返回大于或等于value的最小整数
FLOOR:返回小于或等于value的最大整数
SQRT :返回value的平方根 负数无意义。
//四舍五入 结果为46 
SQL> select round(45.56) from dual;
//绝对值 结果为45.56
SQL> select abs(-45.56) from dual;
//大于等于最小整数 结果为-45
SQL> select ceil(-45.56) from dual;
//小于等于最大整数 结果为-46
SQL> select floor(-45.56) from dual;
//求余数 结果为300
SQL> select mod(1800,500) from dual
//截取的数的操作数是正数的情况下:只操作小数位  结果为1800.11
SQL> select trunc(1800.11111,2) from dual;
//截取的数的操作数是负数的情况下:操作的是小数点之前的位,把操作位小数点之前的位数全部改写成0. 结果就是1000
SQL> select trunc(1899.11111,-3) from dual;




3、日期时间函数
Oracle 中的日期型数据实际含有两个值: 日期和时间。默认的日期格式是 DD-MON-RR.日期时间函数用来返回当前系统的日期和时间、以及对日期和时间类型的数据进行处理运算。

add_months(date,count);在指定的日期上增加count个月
last_day(date);返回日期date所在月的最后一天
months_between(date1,dates);返回date1到date2之间间隔多少个月
new_time(date,this’,’other’);将时间date从this时区转换成other时区
next_day(day,’day’);返回指定日期或最后一的第一个星期几的日期,这里day为星期几
sysdate();获取系统的当前日期
current_timestamp();获取当前的时间和日期值
round:日期的四舍五入
trunc 日期的截取

4、日期的数学运算:
	在日期上加上或减去一个数字结果仍为日期。 
	两个日期相减返回日期之间相差的天数。 
	可以用数字除24来向日期中加上或减去小时。 

//获取系统的当前时间 显示的格式采用默认格式 显示结果:07-4月 -11 11.15.38.390000 上午 +08:00
SQL> select current_timestamp from dual;
//获取系统的当前日期值  显示结果:2011-4-7 11
SQL> select sysdate from dual;
//为当前日期加上3个月 显示的结果:2011-7-7 11:18:36
select add_months(sysdate,3) from dual;
//返回当前月的最后一天 显示的结果:2011-4-30 11:19:4
select last_day(sysdate) from dual;
//返回两个日期之间的间隔月是几: 结果为:4
SQL> select months_between(add_months(sysdate,4),sysdate) from dual;
//从GMT时区转换成AST时区的日期结果
 SQL> select new_time(sysdate,'GMT','AST') from dual;
//返回下一个星期一的日期值   必须写成星期’几’
 SQL> select next_day(sysdate,'星期一') from dual;




5、转换函数:
  隐式转换:在运算过程中由系统自动完成的
  显式转换:在运算过程中需要调用相应的转换函数实现。
隐式转换
转换前数据类型	转换后数据类型
Varchar2 or char	number
Varchar2 or char	date
number	Varchar2
date	Varchar2

显式转换
to_char(date,’format’):按照指定的格式format把数字或日期类型的数据转换成字符串

格式:
			必须包含在单引号中而且大小写敏感。 
			可以包含任意的有效的日期格式。 
			日期之间用逗号隔开。 
   日期格式如下:
格式	举例
YYYY	2011
YEAR	TWO THORUSAND AND FOUR
MM	01
MONTH	JULY
MON	JUL
DY	MON
DAY	MONDAY
DD	03

//把当前日期转换成YYYY/MM/DD的格式
SQL> select to_char(current_timestamp,'YYYY/MM/DD') from dual;
//把当前日期转换成YYYY/MM/DD HH24/MI/SS AM的格式
SQL> select to_char(current_timestamp,'YYYY/MM/DD HH24/MI/SS AM') from dual;
//DD “of” MONTH
SQL> select to_char(current_timestamp,'YYYY DD "of" MONTH  HH/MI/SS AM') from dual;
//把当数字按照$99,999这种方式返回字符串  并且操作数的位数不能够大于5(即$后边的位数)位,否则话结果会是########
SQL> select to_char(11111,'$99,999') from dual;

to_number(char);把包含了数字格式的字符串转换成数字数据
to_date(string,’format’);按照指定格式的format把字符串转换成日期数据,如果省略了foramt格式,那么就采用默认的日期格式(DD-MON-YY);

//把当前字符串转换成日期
SQL> select to_date('2011-02-08','YYYY-MM-DD') from dual;
//求出两个日期之间相差的天数
SQL> select to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD') from dual;
//求出两个日期之间相差的周次 
SQL> select (to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7 from dual;
//对周次进行向上取整
SQL> select ceil((to_date('2011-07-15','YYYY-MM-DD')-to_date('2011-02-08','YYYY-MM-DD'))/7) from dual;

chartorowid(char);把字符串转换成rowid类型
rowidtochar(x);把rowid类型转换成字符类型数据

6、通用函数
 这些函数适用于任何数据类型,同时也适用于空值: 
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)

nvl()
将空值转换成一个已知的值: 
	可以使用的数据类型有日期、字符、数字。 
	函数的一般形式:
•	NVL(commission_pct,0)
•	NVL(hire_date,'01-JAN-97')
•	NVL(job_id,'No Job Yet')
//将comm为null替换成0
SQL> select empno,ename,job,mgr,hiredate,sal,nvl(comm,0),deptno from  emp;
//在上面的基础上将日期为空替换成给定的日期
SQL>select empno,ename,job,mgr,nvl(hiredate,to_date('2011-1-10','YYYY-MM-DD')),sal,nvl(comm,0),deptno from  emp;
//在上面的基础上将job为空替换成redarmy
SQL> select empno,ename,nvl(job,'redarmy'),mgr,nvl(hiredate,to_date('2011-1-10','YYYY-MM-DD')),sal,nvl(comm,0),deptno from  emp;
//计算出员工在该月的工资=(薪资+奖金)
SQL> select empno,ename,job,mgr,hiredate,(nvl(sal,0)+nvl(comm,0)) as "工资",deptno from  emp;

NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3。
   相当于:expr1!=null?exrp2:expr3;
//计算员工的工资
SQL> select empno,ename,job,mgr,hiredate,nvl2(comm,sal+comm,sal) as "工资",deptno from  emp;

NULLIF (expr1, expr2) :  相等返回NULL,不等返回expr1 
//注意观察理解
SQL> select ename as "expr1",job as "expr2",nullif(length(ename),length(job)) from  emp;

	COALESCE 与 NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。 
	如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE 。 
SQL> select empno,ename,job,mgr,hiredate,coalesce(comm,sal,10000) as "salll", deptno from  emp;

	重点理解:单行函数可以嵌套。嵌套函数的执行顺序是由内到外。 

条件表达式 :IF-THEN-ELSE 逻辑
CASE expr WHEN comparison_expr1 THEN return_expr1
         [WHEN comparison_expr2 THEN return_expr2
          WHEN comparison_exprn THEN return_exprn 
          ELSE else_expr]
END


DECODE(col|expression, search1, result1 
      			   [, search2, result2,...,]
      			   [, default])

//为职位是Manager的员工 发放5000元的奖金
SQL> select ename,job,case job when 'MANAGER' then nvl(sal,0)+5000  end  as "工资" from emp;

//员工的工资
SQL> select ename ,job,
  2  case job when 'MANAGER' then nvl(sal,0)+5000+nvl(comm,0)
  3  else nvl(sal,0)+nvl(comm,0)
  4  end
  5  from emp;
//改写成 decode的写法
SQL> select ename,job
  2  ,decode(job,'MANAGER', nvl(sal,0)+5000+nvl(comm,0),
  3  'CLERK',nvl(sal,0)+nvl(comm,0)+200,
  4  nvl(sal,0)+nvl(comm,0)) as "工资"
  5  from emp;

以上内容版权归redarmy_chen所有,如需转载请附带出处,如有疑问请发送到redarmy_chen@qq.com
2
0
分享到:
评论

相关推荐

    精通Oracle.10g.PLSQL编程

    使用LOB对象&lt;br&gt;16.1 LOB简介&lt;br&gt;16.2 DBMS LOB包&lt;br&gt;16.3 访问LOB&lt;br&gt;16.3.1 访问CLOB&lt;br&gt;16.3.2 访问BLOB&lt;br&gt;16.3.3 访问BFILE&lt;br&gt;16.4 习题&lt;br&gt;第17章 使用Oracle系统包&lt;br&gt;17.1 DBMS_OUTPUT&lt;br&gt;17.2...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下:&lt;br&gt;第1章 开发环境 1&lt;br&gt;&lt;br&gt;1.1 Visual Studio开发环境安装与配置 2&lt;br&gt;&lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2&lt;br&gt;&lt;br&gt;0002 配置合适的Visual Studio 2005...

    Oracle常用单行函数

    本文总结了程序员常用的oracle最常用的单行函数

    oracle笔记单行函数

    oracle笔记单行函数,oracle中单行函数有哪些,如何使用,具体案例和代码!

    oracle03单行函数.ppt

    oracle03单行函数.ppt oracle03单行函数.pptoracle03单行函数.ppt oracle03单行函数.ppt oracle03单行函数.ppt oracle03单行函数.ppt

    Oracle_plsql讲义:第3章 单行函数.ppt

    Oracle_plsql讲义:第3章 单行函数.ppt

    Oracle查询练习(单行,函数查询)

    个人觉得比较好的oracle查询练习,学会举一反三,其他题迎刃而解!

    ORACLE单行函数和组函数

    ORACLE单行函数和组函数,doc文档,使用Oracle时的必备参考文档。

    包含了所有的oracle函数文档

    Oracle 函数分类 :单行函数 分组函数 分析函数单行函数分为:日期函数 数字函数 字符函数 转换函数 其他函数分组函数分为:max(最大值) min(最小值) sum(求和) avg(平均) count(求个数) 分析函数分为:rank() 具有相同...

    oracle第4章 单行函数

    内部学习资料,利于初步掌握和日后的学习工作

    Oracle_PL(SQL)单行函数和组函数及使用

    Oracle_PL(SQL)单行函数和组函数及使用

    oracle常用函数

    在SQL中有两种函数一种是单行函数,一种是多行函数.在sql与pl/sql中都自带了很多类型的函数,比如有字符、数字、日期、...下面我们就来分析单行函数,在这里我列举了oracle中一些常用的单行函数进行操作.希望你所有收获:

    oracle(数据类型函数).

    里面有详细的oracle函数 1、Oracle数据类型 2、Oracle函数分为单行函数和多行函数两大类(sql_function) 单行函数分类 字符函数 数值函数 日期函数 转换函数 通用函数 函数嵌套 分组函数:集合操作符(了解) 实现...

    Oracle数据库中单行字符串函数简介

    单行字符串函数用于操作字符串数据,他们大多数有一个或多个参数,其中绝大多数返回字符串。本文为大家介绍了Oracle数据库中单行字符串函数。

    oracle函数大全.rar

    记载了oracle中的单行函数和多行函数。Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)

    Oracle四大宝典之一:Oracle Sql基础 中文版

    第三章 ORACLE SQL 单行函数 第四章 从多表中查询数据 第五章 用组函数合计数据 第六章 子查询 第七章 操纵数据 第八章 创建和管理表 第九章 内置约束 第十章 创建视图 第十一章 其他数据库对象 第十二章 控制用户...

    ORACLE第四章单行函数ppt课件.ppt

    ORACLE第四章单行函数ppt课件.ppt

    Oreacle数据库单行函数练习题(包答案)

    互联网集团出的练习题,能做出这些题,就能掌握单行函数的知识点

    Oracle函数列表速查

    PL/SQL单行函数和组函数详解  函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:  单行函数  组函数  本文将...

    ORACLE的基本函数

    ORACLE的单行函数和多行函数。供各位参看和下载。

Global site tag (gtag.js) - Google Analytics