Oracle之函数

在Oralce中定义了一部分内部函数,通过使用这部分函数可以使用户在进行一些操作的时候更加的方便。

日期函数

日期函数用于处理date类型的数据,默认情况下日期格式为dd-mon-yyyy 即 12-Mon-2004。

sysdate函数    返回系统时间

to_date函数     用来做日期转换

extract(fmt from d) 用于从一个date或者interval类型中截取到特定的部分

add_months(d,n) 返回某一时间d之前或之后n个月的时间

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

sysdate

显示当前的日期,返回date类型数据。

select sysdate from dual;

查看当前的日期

select ename,hiredate from emp where hiredate<(sysdate-8);

查找出已经入职八个月的员工

to_date

to date函数用来做日期转换,主要用于日期格式转换,在Oralce中日期的默认格式为日-月-年,月用英文表示,但有时输入的时候会出现格式不同意,使用该函数可以设置日期的格式来保证存入。

to_date('xxxx-xx-xx','yyyy-mm-dd'))

前面放置的是日期,逗号后面放置的日期格式。yyyy或yy表示年,dd表示天,mm表示月。注:后面年月日的顺序可以随意放置只需要和前面对应即可。

insert into emp (empno,ename,hiredate) values (7935,'FRANK','22-sep-2017');

insert into emp (empno,ename,hiredate) values(7936,'Rose',to_date('2017-09-02','yyyy-mm-dd'));

使用年-月-日的格式想emp表插入新的数据:

extract

extract表示提取date类型数据的部分内容,可提取的内容为年月日。

extract(fmt from d)

d表示的是被提取的部分,fmt表示提取的内容可以为 YEAR,MONTH,DAY。

select extract(year from sysdate) year from dual;

dual表示一个虚表,from前面的year表示别名,sysdate当前日期

select (extract(year from sysdate)-extract(year from hiredate))||'年' KING的工作年限 from emp where ename='KING';

查询emp表中KING的工作年限,假定KIND进入公司后一直在为公司服务

add_months

add_months(d,n) 表示d时间之前或之后n个月的时间,当n为负数表示之前n个月,n为正数表示之后那个月。

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

显示满十年服务年限的员工的姓名和受雇日期

last_day

last_day(d) 返回指定日期所在月份的最后一天,若2017.10.29则返回2017.10.31,这个函数主要是用于根据年份和月份返回该月最后一天。

select last_day(to_date('1999-02-01','yyyy-mm-dd')) year from dual;

select last_day(to_date('2000-02-01','yyyy-mm-dd')) year from dual;

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

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

字符函数

字符函数是指对字符进行操作的函数。

lower(char)         将字符串转化为小写形式

upper(char)        将字符串转化为大写形式

length(char)        返回字符串长度

substr(char,m,n) 取字符串的子串(从1开始计数,m表示从第几个开始,n表示取几个)

replace (char1,serch_string,replace_string) 将一个字符串内的某个字符或字符串全部替换为新的字符或者字符串。

instr(char1,char2,start_position,nth_appearance) 对字符串进行判断,判断其是否含有指定的字符,如果存在则返回该字符串所在的位置。

select lower(ename),sal from emp;

将所有用户的名字按小写方式显示

select upper(ename),sal from emp;

将所有用户的名字按大写方式显示

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

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

select lower(substr(ename,1,3)) from emp;

显示所有员工姓名的前三个字符,并小写显示

select upper(substr(ename,1,1))||lower(substr(ename,2,(length(ename)-1))) 首字母大写 from emp;

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

首字母大写,其余小写思路:

1.取出来首字母大写显示

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

2.取出来后面所有字母小写显示

select lower(substr(ename,2)) from emp;

或者

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

将一个字符串内的某个字符或字符串全部替换为新的字符或者字符串。

replace (char1,serch_string,replace_string)

char1表示原来的字符,serch_string表示你要搜索的字符,replace_string表示替换为的字符。

select replace('aaaaaaabbbbbbbbbcccccc','a','d') fromn dual;

aaaaaaabbbbbbbbbcccccc为需要替换的函数,把a替换为d

instr

对字符串进行判断,判断其是否含有指定的字符,如果存在则返回该字符串所在的位置。

instr(char1,char2,start_position,nth_appearance)

char1,查找char2字符串,start_position开始位置,nth_appearance查找第几次出现的位置。

select instr('qweAfghAiio','A',1,2) from dual;

查询字母A 第二次出现在了我的字符串啥位置

数学函数

数学函数包括cos、cosh、exp、ln、log、sin、sinh、sqrt、tan、tanh、acos、asin、stan、round、trunc、mod、floor、ceil,但最常用的是round。

round(n,[m]) 该函数用于四舍五入,如果去掉m表示四舍五入到整数,如果m是正数表示四舍五入到小数点后面m位,如果m是负数,表示四舍五入到前面m位

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

mod(m,n) 求余数,mod中如果n是0则返回m的值

floor(n) 返回小于或是等于n的最大整数,如23.46返回23

ceil(n) 返回大于或是等于n的最小整数,如23.46返回24

round和trunc的区别是round是四舍五入,trunc是直接去掉尾部,各有优劣看具体情况使用。

select round(sal,1) from emp where ename='JONES';

将JONES四舍五入,如果四舍五入完之后小数点后面有0则会默认省去

select ename,round(sal,-1) from emp where ename in ('SCOTT','KING','ADAMS','JONES');

select ename,round(sal,1) from emp where ename in ('SCOTT','KING','ADAMS','JONES');

select ename,round(sal) from emp where ename in ('SCOTT','KING','ADAMS','JONES');

上述3个命令都用来获取薪资,只是后面小数不同比较区别即可

Select mod(2,1) from dual;

求2对1的余数

Select mod(2,0) from dual;

mod中如果n是0则返回m的值

select floor(23.46) from dual;

select ceil(23.46) from dual;

select ceil(23) from dual;

select ename,trunc(sal/22) 日薪金 from emp;

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

abs(n) 返回数字的绝对值

acos(n) 返回数字的反余弦值

asin(n) 返回数字的反正弦值

atan(n) 返回数字的正切值

cos(n) 返回数字余弦值

exp(n) 返回e的n次幂

log(m,n) 返回对数值

power(m,n) 返回m的n次幂

转换函数

转换函数用于将一种类型转化为另一种类型。常用的转换函数为to_char,将一种类型转换成字符串类型。

to_char('日期','类型');

类型一般包含下面几种

yy         两位数字的年份 2001->04

yyyy     四位数字年份 2004

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

dd        两位数字的天数 30号->30

hh24    24进制小时 下午八点->20

hh12    12进制小时 下午八点->08

mi        分钟

ss        秒

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

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

.          指定位置显示小数点

,          指定位置显示逗号

$         数字前加美元

L         在数字前加本地货币符号(默认$)

C        在数字前加国际货币符号(默认USD)

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

D        在指定位置显示小数点符号

select to_date('2017/9/21','yyyy/mm/dd') from dual;

把一个字符串转换成一个日期

select to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') from dual;

把一个日期转换成字符串

select ename,hiredate from emp where to_char(hiredate,'yyyy')=1980;

显示1980年入职员工

select to_char('88882345.45','L999G999G999D99') from dual;

结果 $88,882,345.45

系统函数

系统函数主要是用于查询系统当前的一些信息,其是直接使用一些固定参数来获取当前系统的信息。

syscontext('usernv','固定参数')

//usernv不可更改,sys_context函数最常用的就是userenv命名空间下的系列参数

terminal                      当前会话客户所对应的的终端的标识符

lanuage(language)    语言

db_name                   当前数据库名称

nls_date_format        当前会话客户所对应的日期格式

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

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

host                           返回数据库所在主机的名称

单行函数

NVL(x,value) 它的功能是进行内容替换,如果x为null,则NVL函数返回value的值,否则返回x本身的值

NVL2(x,value1,value2) 如果x非空,则返回value1的值,否则返回value2的值

select ename,job,sal,nvl(comm,100) comm from emp where sal<2000;

查询工资是2000元以下的员工的姓名,职位,工资和奖金,如果该人没有奖金则每人发100元

select ename,sal+comm 总收入 from emp;

查询每个人总收入(如果不用这种方法,因为奖金有的为空,所以会报错)

select ename,sal 工资,nvl(comm,0) 奖金 from emp;

查询每个人姓名,工资,奖金

select ename,sal+nvl(comm,0) 总收入 from emp;

查询每个人姓名,总收入

其他例子:

select ename,sysdate-hiredate from emp;

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

改进为(去掉小数):select ename,trunc(sysdate-hiredate) from emp;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,680评论 0 2
  • SQL ==SQLPLUS== DML(Data Manipulation Language,数据操作语言)---...
    蝌蚪1573阅读 571评论 0 4
  • ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year:...
    雨一流阅读 649评论 0 2
  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,870评论 0 4
  • 每个人都有自己不同的梦想,有梦想就有追求。凝望着天边的夜空,思索着梦想与现实,星空是那样灿烂,又是那样寂静,像是一...
    疯子Selina阅读 240评论 0 0