Oracle我爱编程数据库

Oracle中常用函数(SQL)

2017-09-02  本文已影响31人  jiandanyaobai

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针对的是单个字符。

上一篇下一篇

猜你喜欢

热点阅读