Oracle常用函数一般分为两大类,包括单行函数(分为
系统函数,
转换函数以及其他函数
)和多行函数(又称为分组函数或者聚合函数)。
一.系统函数:主要分为字符处理型函数,数值处理型函数和日期处理型函数
1.常用字符处理型函数:字符串必须使用单引号。
(1).首字母大写:INITCAP(String)
功能:将String中的每个单词的首字母都转化为大写,其他字母都转化为小写,非英文字母或者已经符合格式的英文字母保持不变,每个单词之间以.或者空格分隔开,最后返回处理后的新字符串。
示例:
SELECT INITCAP ('my name is mr.bean')FROM DUAL; -- FROM DUAL,把返回的结果在虚拟表DUAL中展示
执行结果:
(2).大小写转换函数:
a.小写转大写:UPPER(String)
功能:将String中的所有英文字母转化为大写,本身就是大写字母或者非英文字母则保持不变,最后返回处理后的新字符串。
b.大写转小写:LOWER(String)
功能: 将String中的所有英文字母转化为小写,本身就是小写字母或者非英文字母则保持不变,最后返回处理后的新字符串。
示例:
SELECT UPPER ('my name is mr.bean')FROM DUAL; --小写转大写
SELECT LOWER ('MY NAME IS MR.BEAN')FROM DUAL; --大写转小写
执行结果:
(3).清除左右空格:
a.用法一:TRIM(String)
功能:将String左右两端的空格全部清除,返回清除之后的字符串。
示例:
SELECT TRIM (' my name is mr.bean ')FROM DUAL;
执行结果:
b.用法二:TRIM(‘某单个字符’ FROM String)
(这里必须是单个字符)
功能:删除String中出现的某单个字符,返回删除后的字符串。
示例1:
SELECT TRIM(TRAILING 'm' FROM 'my name is mr.beanmm')FROM DUAL;--删除String右端第一个与单个字符'm'相匹配的字符,若'm'连续出现则全部删除,
--若'm'不连续出现则只删除右端第一个(注意,若String右端第一个字符与目标字符不匹配,则保持原字符串不变返回)
执行结果:
示例2:
SELECT TRIM(LEADING 'm' FROM 'mmy name is mr.bean')FROM DUAL;--删除String左端第一个与单个字符'm'相匹配的字符,若'm'连续出现则全部删除,
--若'm'不连续出现则只删除左端第一个(注意,若String左端第一个字符与目标字符不匹配,则保持原字符串不变返回)
执行结果:
示例3:
SELECT TRIM(BOTH 'm' FROM 'mmy name is mr.beanmmm ')FROM DUAL; --删除String左右两端连续的字符'm',若'm'连续出现则全部删除,
--若'm'不连续出现则只删除两端的第一个(注意,若String两端的第一个字符与目标字符不匹配,则保持原字符串不变返回;
--此外,这个函数只能删除左右两端第一个开始连续的字符'm',并不能删除String中的不连续的字符'm')。
执行结果:
示例4:
SELECT TRIM('m' FROM 'mmy name is mr.beanmmm')FROM DUAL;--若参数中不写BOTH/LEADING/TRAILING 关键字,那么默认为BOTH。
执行结果:
(4).获取字符串长度: LENGTH(String)
功能:直接返回字符串的实际长度,包括空格符。
SELECT LENGTH ('My Name Is Mr.Bean') FROM DUAL;
执行结果:
(5).左右裁剪函数:
a.左裁剪:
用法一:LTRIM(String1,String2)
功能:从String1的左边第一个字符开始扫描,扫描出String1中的【在String2中已经出现过的】并且【连续出现在String1中的】字符(一旦扫描到在String2中没有出现的字符就停止扫描),再删除这些字符,返回删除之后的新字符串。
注意:返回结果与STRING2中的字符顺序无关,只要连续遇到
在String2中出现过的
字符,就删除这些字符;
如果String1左边第一个字符没有在String2中出现过,那么直接原样返回String1 ;
如果String1中所有字符都没在String2中出现过,那么直接原样返回String1 ;
如果String1中所有字符都在String2中出现过,那么直接返回空。
示例:
SELECT LTRIM('HELLO WORLD','LEH')FROM DUAL;
执行结果:
用法二:LTRIM(String)
功能:用于清除String左端连续的空格符。
示例:
SELECT LTRIM(' Bill')FROM DUAL;
执行结果:
b.右裁剪:
用法一:RTRIM(String1,String2)
功能:从String1的右边第一个字符开始扫描,扫描出String1中的【在String2中已经出现过的】并且【连续出现在String1中的】字符(一旦扫描到在String2中没有出现的字符就停止扫描),再删除这些字符,返回删除之后的新字符串。
注意:返回结果与STRING2中的字符顺序无关,只要连续遇到
在String2中出现过的
字符,就删除这些字符;
如果String1右边第一个字符没有在String2中出现过,那么直接原样返回String1 ;
如果String1中所有字符都没在String2中出现过,那么直接原样返回String1 ;
如果String1中所有字符都在String2中出现过,那么直接返回空。
示例:
SELECT RTRIM('HELLO WORLD','LRD')FROM DUAL;
执行结果:
用法二:RTRIM(String)
功能:用于清除String左端连续的空格符。
示例:
SELECT RTRIM(' 科比 ok ')FROM DUAL;
执行结果:
(6).替换字符串函数: REPLACE(String1,String2,String3)
功能:在String1中搜索String2,并用String3替换String2,最后返回替换后的新字符串。String2和String3都可以是单个字符。
示例:
SELECT REPLACE('Hello World','l','L') FROM DUAL;
执行结果:
注意:String3可以为NULL或者”,此时效果相当于删除String1中的String2。但String2不能为NULL或者”,因为这样对String1没有任何效果。
(7).查找字符串位置:
用法一:INSTR(String1,String2)
功能:返回String2在String1中的位置下标,String1和String2都可以是单个字符。当String2是多个字符时,返回的是String2中第一个字符的下标;如果String2不存在于String1中,则返回0。(注意,oracle中字符串的位置下标是从1开始的。)
示例:
SELECT INSTR('Hello,world!','world')FROM DUAL;
执行结果:
用法二:INSTR(String1,String2[,a,b])
功能:在String1中从下标a开始查找String2,返回第b次找到String2时的位置下标,若找不到就返回0。
示例:
SELECT INSTR('ORACLE TRANING','RA',1,2) INSTRING FROM DUAL;
执行结果:
注意:
若a>0则从左到右查找,若a<0则从右到左查找。
当String2中有多个字符时,返回的结果是String2中第一个字符的下标。
(8).截取字符串: SUBSTR(String,p[,q])
功能:在字符串String中从下标p(包含p)开始截取,若指定q值,则从下标p处的字符开始截取q个字符;若不指定q值,则默认从p开始截取到String末尾。
示例:
SELECT SUBSTR('HELLO',3,4)FROM DUAL;
执行结果:
(9).字符串连接函数:CONCAT(String1,String2)
功能:将两个字符串连接在一起,相当于’||’,最后返回连接后的新字符串。
示例:
SELECT CONCAT('HELLO,','WORLD') FROM DUAL;
执行结果:
(10).获取字母的ASCII码: ASCII(‘a’) 直接返回相应字母的ASCII码值。
2.常用数值处理函数
(1).取绝对值:ABS(num),返回num的绝对值
(2).向上取整:CEIL(num),返回大于或者等于num的最小整数
(3).向下取整:FLOOR(num),返回小于或者等于num的最大整数
(4).求幂:POWER(n1,n2), n1为底数,n2为幂
(5).四舍五入:ROUND(num[,n]),返回四舍五入的结果
注意:若不指定n值,则默认返回保留整数的结 果,若指定了n值,则返回保留小数点后n位的结果
(6).求平方根:SQRT(num),返回num的平方根
(7).取余函数:MOD(x,y), 返回x除以y取余的结果
3.常用日期处理函数
(1).获取系统当前日期:SELECT SYSDATE FROM DUAL;
执行结果:
(2).返回日期差:MONTHS_BETWEEN(a,b),返回两个日期之间的月份差
示例:
SELECT MONTHS_BETWEEN(SYSDATE,'11-3月-18') FROM DUAL;
执行结果:
(3).返回在指定日期的基础上增加或减少月数后的日期值:
ADD_MONTHS(a,n),在日期a的基础上增加n个月,返回从a日期开始n个月后的日期
示例:
SELECT ADD_MONTHS(SYSDATE,7) FROM DUAL;
执行结果:
注意:若n为负值,则返回距离a日期n个月之前的日期值;若n等于0,则返回原日期值a。
另外没有ADD_DAYS和ADD_YEARS函数。
(4).返回指定日期后第一个星期几的日期:NEXT_DAY(a,’星期三’),返回日期a之后的第一个星期三的日期
示例:
SELECT NEXT_DAY(SYSDATE,'星期三')FROM DUAL;
执行结果:
注意:只能写成’星期几’的格式,不能写成’周几’或者’礼拜几’,周日只能写成’星期日’,不能写成’星期天’。