oracle-单行函数
Posted Piper.Xiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle-单行函数相关的知识,希望对你有一定的参考价值。
oracle函数分为单行函数和多行函数,下面的图能很清楚的说明单行函数和多行函数:
单行函数是指接收一个输入,返回一个输出,包括 字符函数、数值函数、日期函数、转换函数和通用函数:
多行函数和单行函数相比,oracle提供了丰富的基于组的,多行的函数。这些函数能在select或select的having子句中使用,当用于select子串时常常都和GROUP BY一起使用。多行函数分为接收多个输入,返回一个输出。
一、单行函数
1、字符函数
1)、大小写控制函数
/*转小写*/ select lower(\'HELLOWORD\') FROM DUAL;--helloword /*转大写*/ select upper(\'helloword\') FROM DUAL;--HELLOWORD /*首字母大学*/ select initcap(\'hELLOword\') FROM DUAL;--Helloword
2)、字符控制函数
/* 1、连接两个字符*/ select concat(\'str1\',\'str2\') from dual;--str1str2 /* 2、字符串截取,param1:要截取的字符串;param2:开始截取位置;param3:截取的个数*/ select substr(\'helloword\',1,5) from dual;--hello /* 3、判断字符串的长度*/ select length(\'holleworld\') from dual;--10 /* 4、某一个字符串在另一个字符串中首次出现的位置,如果没有返回0*/ select instr(\'helloword\',\'dd\') from dual;--0 select instr(\'helloword\',\'hello\') from dual;--1 /* 5、左对齐 param1:填充的字符串 param2:填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短, lpad函数将会把字符串截取成从左到右的n个字符 param3:填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写, lpad函数将会在string的左边粘贴空格 */ select lpad(\'hello\',10,\'#\') from dual;--#####hello /* 6、右对齐 参数和左对齐的含义一样*/ select rpad(\'hello\',10,\'#\') from dual;--hello##### /* 7、将一个字符从另一个字符中移除*/ select trim(\'H\' from \'HELLOWORLD\') from dual;--ELLOWORLD select trim(\'A\' from \'HELLOWORLD\') from dual;--HELLOWORLD select trim(\'H\' from \'HELLOHWORLDH\') from dual;--ELLOHWORLD /* 8、替换函数 replace(param1,param2,param3),将param1中的param2替换成param3,将所有的param2都替换成param3 */ SELECT REPLACE(\'helloword\',\'o\',\'O\') FROM DUAL;--hellOwOrd
2、数字函数
/* 1、四舍五入*/ select round(123.456),round(123.556),round(123.456,2),round(435.45,-2),round(435.45,-5),round(435.45,5) from dual; --123 124 123.46 400 0 435.45 /* 2、截断 param1为必要参数,是输入的一个日期值 param2参数可忽略,是日期格式 */ /*1>、截取时间到年时,yyyy也可用year替换*/ select trunc(sysdate,\'yyyy\') from dual; --2018/1/1 /*2>、截取时间到月时*/ select trunc(sysdate,\'mm\') from dual;--2018/4/1 /*3>、截取时间到日时*/ select trunc(sysdate,\'dd\') from dual;--2018/4/28 /*4>、截取时间到小时时*/ select trunc(sysdate,\'hh\') from dual;--2018/4/28 9:00:00 /*5>、截取时间到分钟时*/ select trunc(sysdate,\'mi\') from dual;--2018/4/28 9:48:00 /* 3、求余 mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数 */ select mod(10,3) from dual;--1
3、日期函数
1)、在日期上加上一个数或者减上一个数仍为日期;
2)、两个日期相减返回之间相差的天数,日期不允许做加法(没意义);
3)、用数字除24向日期中加上或者减上天数;
/*日期函数*/ select sysdate,sysdate+1,sysdate-3 from dual; --2018/4/28 9:58:37 --2018/4/29 9:58:37 --2018/4/25 9:58:37 /*判断两个日志之间相差的月份*/ select months_between(sysdate,sysdate-35) from dual;--1.12903225806452 /*向指定的日期中加上若干个月*/ select add_months(sysdate,2),add_months(sysdate,-3) from dual; --2018/6/28 10:03:05 --2018/1/28 10:03:05 /*当前日期开始得到到未来星期数的日期*/ select sysdate,next_day(sysdate,\'星期日\'),next_day(sysdate,\'星期二\'),next_day(sysdate,\'星期六\') from dual; --2018/4/28 10:07:30 --2018/4/29 10:07:30 --2018/5/1 10:07:30 --2018/5/1 10:07:30 /*获取本月的最后一天*/ select last_day(sysdate) from dual; /*其它日期处理*/ select round(sysdate,\'month\'),round(sysdate,\'mm\') from dual;--\'month\'和\'mm\'一样 --2018/5/1 2018/5/1 select round(sysdate,\'year\') from dual;--2018/1/1 select sysdate,trunc(sysdate,\'year\'),trunc(sysdate,\'month\') from dual; --2018/4/28 10:12:26 --2018/1/1 --2018/4/1
4、转换函数
分为隐式转换和显示转换,如图:
隐式类型转换:oracle自动完成下列的转换
源数据类型 | 目标数据类型 |
varchar2 or char | number |
varchar2 or char | date |
number | varchar2 |
date | varchar2 |
date <======>varchar2<======>number
例如:
select \'12\'+2 from dual;--14 select sysdate+2 from dual;--2018/4/30 10:19:20 select 123,123,123.24+2 from dual;---123 123 125.24
显示类型转换:
/*char和date之间的转换*/ SELECT TO_CHAR(SYSDATE,\'YYYY-MM-DD\') FROM DUAL;--2018-04-28 SELECT TO_DATE(\'2018-04-28\',\'YYYY-MM-DD\') FROM DUAL;--2018/4/28 SELECT TO_DATE(\'2018-04-28\',\'YYYY/MM/DD\') FROM DUAL;--2018/4/28 SELECT TO_char(sysdate,\'YYYY"年"MM"月"DD"日"\') FROM DUAL;--2018年04月28日 /*char和number之间的转换*/ SELECT TO_CHAR(1234567.89,\'999,999,999.99\') FROM DUAL;--1,234,567.89 SELECT TO_CHAR(1234567.89,\'000,000,99.99\') FROM DUAL;--012,345,67.89 SELECT TO_CHAR(1234567.89,\'000,000,999.99\') FROM DUAL;-- 001,234,567.89 SELECT TO_CHAR(1234567.89,\'$00,000,999.99\') FROM DUAL;-- $01,234,567.89 /*(本地的钱符号)*/ SELECT TO_CHAR(1234567.89,\'L00,000,999.99\') FROM DUAL;--¥01,234,567.89
to_char()函数对数字的转换过程中,下面是to_char()函数经常用到的几种格式:
9 | 数字 |
0 | 零 |
$ | 美元 |
L | 本地货币符号(用local理解) |
. | 小数点 |
, | 千位符号 |
to_number(\'¥001,234,567,89\',\'L000,000,99.99\')可以做运算,我想如果你在美国,就要将¥换成$了;
以上是关于oracle-单行函数的主要内容,如果未能解决你的问题,请参考以下文章