Oracle中常用函数(SQL)

Oracle函授有以下几个分类:
数字函数、字符函数、日期函数、转换函数、集合函数、分析函数

数字函数:

函数名称 作用
abs(n) 返回n的绝对值
ceil(n) 返回>=n的最小整数
floor(n) 返回>=n的最大整数
round(n,[m]) 四舍五入运算,如果m缺省则四舍五入到整数位 m<0,四舍五入到小数点的前m位,m>0四舍五入到小数点的后m位
trunc(n,[m]) 截取数字,如果m缺省则将小数位截去 m<0,截取到小数点的前m位,m>0截取到小数点的后m位
select abs(-1.3),ceil(-1.3),ceil(1.3),
       floor(-2.6),floor(2.6),
       round(-888.689),round(-888.689,2),round(-889.689,-2),
       trunc(-888.689),trunc(-888.689,2),trunc(-888.689,-2)
       from dual

字符函数:

lpad(s1,n,s2):在字符串S1的左端填充字符串S2,直到填充后的S1总长度为n,S2的缺省值为空格,如果S1的长度>n,则直接返回S1左端n个字符。
rpad(s1,n,s2):同理在右端

substr(s1,m,n):取得字串s1从m开始,长度为n的子串,m>0表示从头开始搜索,m<0表示从尾开始

select substr('天气真好!',1,3),
       substr('我一点都不开心',3,5) 
       from dual
Paste_Image.png

ltrim(s1,set):从左端开始逐一取得字串s1左端包含的set中的任何字符, 当遇到不是set中的字符是,则结束并返回剩余结果

SELECT ltrim('天气真好','天') from dual
#气真好

rtrim(s1,set):从右端开始逐一取得字串s1右端包含的set中的任何字符,当遇到不是set中的字符是,则结束并返回剩余结果

SELECT rtrim('jhsony','ny') from dual
#jhso

trim(c FROM s2):从字串s2的头部、尾部、或两端截去字符c(c只能够是一个字符)当遇到不是set中的字符是,则结束并返回剩余结果

SELECT trim('j' from 'jhsony') from dual
#hsony

nvl(a,b) 函数nvl 判断a表达式,如果a为空则返回b,通常用来判断某个字段的值是否为空,用途十分广泛的。
如果为空,则传回b的值。当然我们一般是让b=0,你也可以赋其它的值1,2,3,4等等。

select * from ima_file
select nvl(ima03,1) from ima_file where ima01='E.CN.0228R'
Paste_Image.png

decode(字段,条件1,值1,条件2,值2)
针对同一字段有不同值的时候,可以用decode 来简化SQL语句

日期函数:
sysdate:返回系统当前日期时间
systimestamp:返回系统当前日期时间和时区
current_date:返回当前回话时区所对应的日期和时间
current_timestamp:返回当前回话时区所对应的日期时间
localtimestamp:返回当前回话时区所对应的日期时间
systimestamp:返回系统当前日期时间和时区
sessiontimezone:返回当前回话所在的时区
dbtimezone:返回资料库所在的时区

查询会用到的函数:
INTERSECT:取两个结果的交集
MINUS:获取两个结果集的差集,返回在第一个结果集中存在但是第二个结果集中不存在的记录
UNION ALL:获取两个结果的并集,但不会去掉合并结果中重复的记录
UNION:获取两个结果的并集,且去掉合并结果中重复的记录
WITH 表名 as (SQL子查询语句):可以将(SQL子查询语句复用)
START WITH ... CONNECT BY PRIOR ... 实现Oracle层次查询
EXISTS 相关子查询是指需要应用主查询列表中的子查询语句,需要通过谓词EXISTS来实现,当使用EXSISTS谓词时,如果子查询存在返回结果则条件返回TRUE,否则返回FALSE
coalesce(expr1[,expr2]...):返回运算式中第一个not null运算式的结果

select coalesce('','','','aa','bb') from dual
---------
aa

translate函数
语法:TRANSLATE(char, from, to)
用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。
若from比to字符串长,那么在from中比to中多出的字符将会被删除。
三个参数中有一个是空,返回值也将是空值。

select translate('abcdefga','abc','wo') 返回值 from dual;
--返回值
wodefgw

分析:该语句要将'abcdefga'中的'abc'转换为'wo',
由于'abc'中'a'对应'wo'中的'w',
故将'abcdefga'中的'a'全部转换成'w';
而'abc'中'b'对应'wo'中的'o',
故将'abcdefga'中的'b'全部转换成'o';
'abc'中的'c'在'wo'中没有与之对应的字符,
故将'abcdefga'中的'c'全部删除;
简单说来,就是将from中的字符转换为to中与之位置对应的字符,
若to中找不到与之对应的字符,返回值中的该字符将会被删除。
在实际的业务中,可以用来删除一些异常数据,
比如表a中的一个字段t_no表示电话号码,
而电话号码本身应该是一个由数字组成的字符串,
为了删除那些含有非数字的异常数据,
就用到了translate函数:

delete from a where length(translate(trim(a.t_no),'0123456789' || a.t_no, '0123456789')) <> length(trim(a.t_no))

replace函数
语法:REPLACE(char, search_string,replacement_string)
用法:将char中的字符串search_string全部转换为字符串replacement_string。
举例

select REPLACE('fgsgswsgs', 'fk' ,'j') 返回值 from dual;
返回值
fgsgswsgs
select REPLACE('fgsgswsgs', 'sg' ,'eeerrrttt') 返回值 from dual;
返回值 
fgeeerrrtttsweeerrrttts

分析:第一个例子中由于'fgsgswsgs'中没有与'fk'匹配的字符串,
故返回值仍然是'fgsgswsgs';
第二个例子中将'fgsgswsgs'中的字符串'sg'全部转换为'eeerrrttt'。
总结:综上所述,replace与translate都是替代函数,只不过replace针对的是字符串,而translate针对的是单个字符。

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

推荐阅读更多精彩内容

  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,485评论 0 3
  • 转自公众号‘java一日一条’ 1.字符串函数 ascii(str) 返回字符串str的第一个字符的ascii值(...
    LOOK_LOOK阅读 658评论 0 1
  • 1、字符串函数 ascii(str) 返回字符串str的第一个字符的ascii值(str是空串时返回0) mysq...
    安易学车阅读 243评论 0 2
  • 我越走越近,咸腥的海风迎面而来。 不知不觉中,又走到了海边。 拒绝了所有的邀约,就这样一个人静静地在街头走着。 坐...
    五月蔷薇开阅读 150评论 0 0
  • 作为一个脑洞时常开很大的人,我常常会在夜里硬撑着困意胡思乱想,想着想着就过了睡觉时间,以至于度过了很多失眠的深夜。...
    咕冬夜阅读 572评论 0 1