Oracle的函数

来源:互联网 发布:知乎观光团 编辑:程序博客网 时间:2024/05/16 05:29

函数对字段进行处理:

一、字符函数

lower(char):将字符串转换为小写的格式

upper(char):将字符串转换为大写的格式

length(char):返回字符串的长度

substr(char,m,n):取字符串的子串【m是从某位开始;n是表示 去多少个】

?将所有的和员工名字按小写的方式显示

select  lower(ename)  from   emp;

?显示正好5个字符的员工的姓名

select  ename from  emp  where  length(ename)=5;

?显示所有员工姓名的前三个字母

SQL> select  substr(ename,1,3) "员工简称" from emp  ;

?以首字母大写的方式显示所有员工的姓名

· select  sbstr(ename,1,1)+substr(lower(ename),2,10)  from emp ;【错误】

1、完成首字母大小写

select   upper(substr(ename,1,1)from emp;

2、完成后面字母小写

select   lower(substr(ename,2,length(ename)-1)from emp;

3、合并

select   upper(substr(ename,1,1) || lower(substr(ename,2,length(ename)-1)from emp;


replace(char,search_string,replace_string)

instr(char1,char2,[,n[,m]])    取子串在字符串的位置


?显示所有员工的姓名,用a替换A;

select   replace(ename,'a','A')  from  emp ;

select  instr(ename,'a',1,2)  from emp;


数学函数的输入参数和返回值的数据类型都是数字类型的,数学函数包括cos,cosh,exp,log,sin,sinh,sqrt,tan,tanh,axos,asin,atan,round;

  round(n,[m]):四舍五入的,如果省掉m,则是四舍五入到整数, 如果m是整数则四舍五入到小数点的m位后。如果m是负数,则四舍五入到小数点的m位前。round(sal,2)→保留两位小数,

trunc(n,[m]):该函数用于截取数字。如果省掉m就截取小数部分,如果m是整数就截取到小数点m位前,如果是负数,则截取到小数点的前m位


mod(m,n):取模运算

floor(n):返回小于或者等于n的最大整数

ceil(n):返回大于或者等于n的最小整数


对数字的处理,在财务系统或者银行系统中用的比较多;

?显示在一个月为30天的情况所有员工的日薪金,忽略余数

select  (sal-mod(sal,30))/30  from emp ;


其他的数学函数

图1

图1


日期函数用于处理date类型的数据,默认情况下日期格式是dd-mon-yy即12-7月-78

(1)sysdate:该函数返回系统时间    SQL> select  sysdate  from  dual;

(2)add_months(d,n)【d表示date类型的字段,n表示要增加的n个月】

(3)last_day(d):返回指定日期所在的月份的最后一天


?查找已经入职8个月多的员工

select * from emp  where  sysdate>add_months(hiredate,8);

?显示已经man10年服务年限的员工的姓名和受雇日期

select * from emp  where  sysdate>add_months(hiredate,12*10);

?对于每个员工,显示其加入公司的天数

select  trunc(sysdate -hiredate) "入职天数",ename   from emp   ;


?找出各月倒数第三天受雇的所有员工

select  hiredate ,ename  from  emp   where last_day(hiredate)-2 =hiredate;


转换函数

用于将数据类型从一种转为另一种类型,在某些情况下oracle server 允许值的数据类型和实际不一样,这是oracle会隐含转化数据类型;

例如: crate table  t1(id  int);

insert  into t1    values ('10') 这样oracle会自动将‘10’→10

to_char()

?日期是否可以显示时/分/秒

?薪水是否可以显示指定的货币符号

yy:两位数字的年份   2004——04

yyyy:四位数字的年份     2004年 

mm:两位数字的月份   8月 ----------08

dd:2位数字的天  30号-=---------30

hh24:8点---------08

mi、ss ----------显示分钟/秒

select   ename,to_char(hiredate,'yyy-mm-dd:hh24:mi:ss')   from  emp  ;


9:显示数字,并忽略前面0、、

0:显示数字,如果位数不足,则用 0补齐

.:在指定位置显示小数点

,:在指定为位置显示逗号

  S:在数字前加美元

L:在数字前加本地货币符号

C:在数字面前加国际货币符号

G:在指定位置显示组分隔符

D:在指定位置显示小数点符号(.)

SQL> select  ename,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),to_char(sal,'L9999.99')  from  emp;


?显示1980年入职的所有员工

select  *  from  emp  where   to_char(hiredate,'yyyy') = 1988;

?显示所有12月份入职的员工

select  *  from  emp  where   to_char(hiredate,'mm') = 12;



系统函数

sys_context

(1)terminal:当前回话客户所对应的的终端的表示符

(2)lanuage:语言

(3)db_name:当前数据库名称

(4)nls_date_format:当前会话客户所对应的的时期格式

(5)session_user:当前会话客户所对应的数据库用户名

(6)current_schema:当前会话客户所对应的默认方案名

(7)host:返回数据库所在主机的名称


select   sys_context('usernv','db_name')   from  dual;//加粗部分是固定的

0 0