Oracle中单值函数有四种:字符函数,数字函数,日期函数,转换函数
字符函数:Oracle中对字符类型的数据进行处理的函数
lower:将字符类型的数据全部转为小写
例如:select lower(name) from test
查找出test表中的name字段 并且将它全部变为小写
例如:select upper(name) from test
查找出test表中的name字段 并且将它全部变为大写
initcap:将字符串中首字母变为大写
例如:select initcap('hello') from dual
结果:Hello
dual是哑表,是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录,任何用户都可以操作,当你不需要从具体表中取数据时,例如计算1+2的值,就可以用到dual表
concat:连接字符串
例如: select concat('hello','world') from dual;
结果:helloworld
substr:获取字符串的字串
格式:substr(字符串,截取开始位置,截取长度)
例如:select substr('helloworld',2,4) from dual;
结果:ello
例如:select length('hello') from dual;
结果是:5
nvl函数:nvl(arg,value)如果arg为空,就用value值来表示arg的值
例如:select last_name,nvl(salary,0) from test;
结果:jack 0
例如:select replace (name,‘aa’,‘bb’) from test
解释:查询test表中的名字,并且将名字中含有aa字符串的全部改为bb
instr函数:找出字串在父串中的位置,0表示在父串中没有改字串 开始位置从1开始
例如:select instr('Hello World','World')from dual;
结果:7
trim函数:截断字符串
截断连续的前置a
例如:select trim(leading 'a' from 'aaaaabbbbbbssdfsfs')from dual
结果;bbbbbbssdfsfs
截断连续的后置a
例如:select trim(trailing 'a' from 'assahaaaaa')from dual
结果:assah
截断连续的前置a和后置a(默认是这种方式)
例如:select trim(trailing 'a' from 'assahaaaaa')from dual
结果:ssah
格式:lpad(需要铺垫的字符串,最终返回的字符串长度,用于填充的字符)
如果最终要返回的长度小于字符串本身长度 那就从左到右截取该字符串 最终长度为第二个参数
用于填充的字符可以为空
例如:select lapd('liujd',10,'6') from dual
结果:66666liujd
例如:select lpad ('liujd',3,'6') from dual
结果:liu
用法和lpad一样
例如:select rapd('liujd',10,'6') from dual
结果:liujd66666
例如:select rpad ('liujd',3,'6') from dual
结果:liu
数字函数:Oracle对数字类型数据的处理函数
abs(n) :返回n的绝对值
例如:select abs(-1),abs(1) from dual;
结果:1 1
例如:select ceil(10),ceil(10.5),ceil(-10.5) from dual;
结果:10 11 -10
例如:select floor(10),floor(10.5),floor(-10.5) from dual;
结果:10 10 -11
例如:select round(35.36,1) from dual
结果:35.4
第二个参数表示小数取几位,就是四舍五入到哪一位
例如:select round(35.36,0) from dual
结果是:35
例如:select round(35.36,-1) from dual
结果是:40
格式:trunc(number,decimals)
number是待处理的数值
decimals表示需要保留小数点后面的位数
例如:select trunc(35.36,1)from dual;
结果:35.3
mod:取余数
例如: select mod(10,3) from dual;
结果:1
日期函数:Oracle中对日期格式的数据的处理
months_between:计算两个日期之间的差距
例如:select months_between('01-MAR-99','01-JAN-99') from dual;
结果:2
注意:此时应该将当前的数据库会话改为英文环境
语法:
alter session set nls_date_language=english;
例如:select add_months('01_MAR-99',12) from dual;
结果:01-MAR-00
next_day:从当前时间计算,下一个指定的星期是具体的哪一天
例如:select next_day(sysdate,'FRIDAY') from dual;
假设我现在是7月20号 下一个周五应该是明天 所以结果是7月21号
例如:select last_day(sysdate) from dual;
我当前是7月20号,本月最后一天是7月31号
dateString表示字符串类型的日期
dateFormat表示要转成的指定格式
例如:select to_date(‘2017-07-20 12.12.12’,'yyyy-mm-dd hh24:mi:ss') from dual
结果:2017-07-20 12.12.12
number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分,并四舍五入。如果为负数则表示从小数点开始左边的位数,相应整数数字用0填充,小数被去掉。decimals 如果是小数都只取整数部分
例如:select round(5555.6666,2.1),round(5555.6666,-2.6),round(5555.6666) from dual;
结果: 5555.67 , 5600 , 5556
number 待做截取处理的数值
decimals 指明需要保留小数点后的位数,可选项 默认为0 为负数时表示从右往左截取 为整数时反之
例如:select trunc(5555.66666,2.1),trunc(5555.66666,-2.6),trunc(5555.033333) from dual;
结果:5555.66 5500 5555
round(x[,y]) 返回截取后的值,用法同trunc(x[,y]),只是要做四舍五入
trunc(x[,y]) 返回截取后的值,用法同round(x[,y]),只是不四舍五入
转换函数 :Oracle中用于字符串和日期 数字之间的转换
to_char:用来将一个日期转换成字符串
例如:select to_char(sysdate,'YYYY-MM-DD') from dual;
结果:2016-01-11
例如:select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS AM') from dual;
结果:2016-01-11 10:31:56 AM
例如:select to_number('2016') from dual;
结果: 2016
例如:select to_date('17-02-1991','dd-mm-yy') from dual;
结果:17-FEB-91
Oracle中的 sysdate表示系统当前时间
查看当前系统时间
select sysdate from dual
可以用sysdate的加减运算来获取日期 sysdate加减获取的是天数
Oracle中的默认时间格式是 '01-FEB-01"
(本文只列举了部分常用的函数。。。。。。)