设为首页 收藏本站
查看: 1449|回复: 0

[经验分享] 个人总结—Oracle单行函数

[复制链接]

尚未签到

发表于 2016-7-17 11:15:50 | 显示全部楼层 |阅读模式
--数字函数
·floor(n):返回小于等于n的最大整数。
  
·ceil(n):返回大于等于n的最小整数。

·mod(m,n):返回m/n的余数,m,n可以为浮点数。

·round(n[,integer]):对n进行四舍五入,如果integer>0则精确到小数点后integer位,否则精确到小数点前integer位,缺省为0(精确到整数部分)。

SELECT floor(123.5),floor(123.0),floor(123),floor(-123.5),floor(-123.0),floor(-123.1),ceil(123.5),ceil(123.0),ceil(123),ceil(-123.5),ceil(-123.0),ceil(-123.1) FROM dual; --取小于入参的最大整数,大于入参的最小整数
SELECT round(123.5),round(123.253,2),round(-123.5),round(-123.253,2) FROM dual;--四舍五入
SELECT MOD(3,2),MOD(3,4) FROM dual;--取余

--字符函数
instr(string,substring[,position][,occurrence]:返回substring在string中的位置,返回整数。

substr(string,position[,substring_length]):从position的位置截取,substring_length个字符的子串,如果substring_length缺省或大于剩下所有字符的长度,则截取剩下所有的字符。

lower(char):将char全部转换成小写。

upper(char):将char全部转换成大写。

Length(char):返回char有多少个字符,如果char为null,则返回null。
ltrim(char):去除char的左空格;

rtrim(char):去除char的右空格;

trim(char):去除左右空格

replace(char,search_string[,replacement_string]):解决trim不能去除中间空格的问题,用 replacement_string替换char中所有的search_string,如果replacement_string缺省则默认为null

chr(n):将ascii码值转换成字符;

ascii(char):将char转换成对应的ascii码;

lpad(char1,n[,char2]):如果char1的长度>=n,则返回char1的前n位的子串,否则,在左边用n-char1个char2补足,如果char2缺省,则自动填充空格;

rpad(char1,n[,char2]):与lpad类似,在右侧填充

nvl(“String1”,’String2’):当String1 为空时就返回 String2 ,当String1不为空时就返回String1.

Sub(‘String’,int1,int 2): 从字符串String的第int1个下标开始向后截取int2位。


SELECT INITCAP ('initcap'),INITCAP ('%$initcap'),INITCAP ('444initcap'),INITCAP ('%%444initcap') FROM dual;--首字母(数字或字母)转换成大写,如果首字母为非数字、字母,则将其看做是空格
SELECT concat('A','B C'),'A'||'B C' FROM dual;--连接符,必须2个入参
SELECT CHR(97),CHR((256+97)),chr(12.5),ascii('a'),ascii('abc'),ascii('&') FROM dual;--chr和ascii函数
SELECT upper('dd123dd@#DD'),lower('ddd,DDDD45666') FROM dual;--只对字母操作,大小写互转
SELECT ltrim(' fff    fff  '),rtrim(' fff    fff  '),TRIM(' fff    fff  ') ,TRIM(' ' FROM ' fff    fff  '),TRIM(0 FROM '  00012300001230000 '),TRIM(0 FROM '00012300001230000') FROM dual;--trim,ltrim,和rtrim只能对头操作
SELECT replace(REPLACE('  00012300001230000 ',0,''),' ',''),REPLACE('  123456 ',' ','a'),replace('  123456 ',' ')  FROM dual;--用特定的字符(缺省为'')替换源字符串中的指定字符
SELECT LPAD('Page 1',15,'*.') ,LPAD('Page 1',15),LPAD('Page 1',15,'*.') ,rPAD('Page 1',15),LPAD('Page 1',15,'*.') ,rPAD('Page 1',15,'*.'),lpad('123456',3,'d'),rpad('1233456',4,'d') FROM DUAL;--lpad,prpad,如果第二个参数>=第一个参数的长度,则在左边或右边补差额个第三个参数的字符,如果第三个字符缺省则用空格填充,返回值的长度等于第二个参数的值;否则则从第一个字符开始截取第一个参数的第二个参数长度的字符返回,返回值的长度等于第二个参数的值
SELECT length(LPAD('Page 1',15,'*.')) ,length(LPAD('Page 1',15)),length(LPAD('Page 1',15,'*.')) ,length(rPAD('Page 1',15)),length(LPAD('Page 1',15,'*.')) ,length(rPAD('Page 1',15,'*.')),length(lpad('123456',3,'d')),length(rpad('1233456',4,'d')) FROM DUAL;--只有一个字符型的入参,求字符的长度
SELECT substr('123456789',0),substr('123456789',1),substr('123456789',0,2),substr('123456789',1,2),substr('123456789',1,9),substr('123456789',1,11),substr('123456789',-1),substr('123456789',-1,2),substr('123456789',-5,5),substr('123456789',-1,10) FROM dual;--截子串函数:至少有2个入参,如果第二个入参为正,则从第2个值的位置开始(如果为负,则从倒数第2个值的位置)截取第三个值的长度个字节
SELECT instr('CORPORATE FLOOR','OR'),instr('CORPORATE FLOOR','OR',3),instr('CORPORATE FLOOR','OR', 3, 2),instr('CORPORATE FLOOR','OR', 3, 5),instr('CORPORATE FLOOR','OR', -3, 2) FROM dual;--一个字串在目标字符串的位置,从第几个开始找,按照什么顺序,如果不存在则返回0、

Select NVL(‘String1’,’String2’) from dual 时就会返回 String1
Select NVL(‘’,’String2’) from dual 时就会返回 String2

Select substr(‘String’,1,1) from dual 从下标一开始 向后截取1 位 返回结果是 S
注意:下标是从1开始的;
Select substr(‘String’,2,4) from dual 返回的结果是 trin  ;




--日期函数
add_months(d,n):将日期d加n个月后的日期,再拼上d的时间部分返回。


last_day(d):返回日期d所在月的最后一天的日期+d的时间部分。


trunc (d,fmt):将日期截取精确到fmt的部分,最多只能精确到小时,fmt可以为yyyy,mm,dd,hh[24],fmt缺省为精确到dd。

SELECT add_months(SYSDATE,1),add_months(SYSDATE,-1),add_months(to_date('2010-03-31','yyyy-mm-dd'),1),add_months(to_date('2010-03-31','yyyy-mm-dd'),-1) FROM dual;--在当前日期上加减1个月
SELECT last_day(SYSDATE) FROM dual;--当前月的最后一天加上参数的hh24:mi:ss
SELECT trunc(SYSDATE,'yyyy'),trunc(SYSDATE,'mm'),trunc(SYSDATE,'dd'),trunc(SYSDATE,'hh24'),trunc(SYSDATE) FROM dual;--截取函数,最多只能精确到时




--转换函数
·to_char(d,fmt):将日期按照fmt的格式转换成字符类型,fmt可以输入的格式及转换的结果说明:下一页ppt中有说明

·to_date(chr,fmt):将chr按照fmt的格式转换成日期型,fmt的格式要与chr相同。

·其它函数:

· Nvl(exp1,exp2):如果exp1为空,则返回exp2的值,否则返回exp1的值

·Decode(exp,search,result[,default]):如果exp=search,则返回result,否则返回default,如果default缺省,则返回null

SELECT to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'),to_char(SYSDATE,'day'),to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'),to_char(SYSDATE,'AM'),to_char(SYSDATE,'ddd'),to_char(SYSDATE,'dd'),to_char(SYSDATE-1,'d') FROM dual;
SELECT to_date('2009-11-13 15:44:33','yyyy-mm-dd hh24:mi:ss') FROM dual;




--其他函数
SELECT decode(123,1,'a',3,'b','c') FROM dual;
SELECT nvl('123','456') FROM dual;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-245277-1-1.html 上篇帖子: oracle join 连接查询 下篇帖子: oracle用户关联表空间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表