1.单行函数
1.1 字符函数
.字符大小写转换
lower():字母转换为小写
select lower('TEST') from dual;--结果testupper():字母转换为大写
select upper('test') from dual;--结果TESTinitcap():首字母转换为大写,如果为空格分开,每个单词首字母转换为大写
select initcap('test') from dual;--结果Test select initcap('test mine') from dual;--结果Test Mine
. 字符处理
concat():连接两个字符串,只接受两个字符串参数
select substr('1234567',2,3) from dual;--结果234,从第二个位置,截取3个字符
substr():字符串截取
select substr('1234567',2,3) from dual;--结果234,从第二个位置,截取3个字符
length():返回字符串的长度
select length('minetest') from dual;--结果8 select length('mine test') from dual;--结果9,空格也算在长度之内
instr():定位子字符串在整个字符串中的位置
select instr('minetest','e') from dual;--结果4,从1开始,找到第一个子符出现的下标
lpad():左侧填充
select lpad('one',10,'*') from dual;--结果*******one,字符串为10个长度,不足的左边补*号填充
lpad():右侧填充
select rpad('one',10,'*') from dual;--结果one*******,字符串为10个长度,不足的右边补*号填充
trim():过滤掉字符串首位空格符
select trim(' ** ') from dual;--结果**(两边的空格已经去掉,可以用length()求长度比较)
replace():替换字符串
select replace('mine','m','****') from dual;--结果****ine,把mine中的m用****替换掉
1.2 数值函数
abs():取绝对值
select abs(-1) from dual;--结果1
round():四舍五入取值
select round(1.235) from dual;--结果1 select round(1.535) from dual;--结果2 select round(1.535,2) from dual;--结果1.54 select round(1.53534,4) from dual;--结果1.5353
trunc():截断,不四舍五入
select trunc(1.96) from dual;--结果1(直接取整,把小数点部分干掉)
ceil():向上取整
select ceil(9.1) from dual;--结果10 select ceil(9.9) from dual;--结果10
floor():向下取整
select floor(9.1) from dual;--结果9 select floor(9.9) from dual;--结果9
sign():判断数值正负,-1为负数,1为正数
select sign(-100) from dual;--结果-1为负数 select sign(100) from dual;--结果1为正数
power():幂运算
select power(2,3) from dual;--结果8,2的3次方
sqrt():开平方根
select sqrt(4) from dual;--结果2,4开平方根
mod():取模
select mod(10,3) from dual;--结果1,10对3求余数
exp():基数为e的幂运算
select exp(1) from dual;--结果2.71828182845905
log():对数运算
select exp(1) from dual;--结果2.71828182845905
ln():自然对数运算
select ln(2) from dual;--结果0.693147180559945
1.3 日期函数
add_months(x,y),当前日期x上加上y月
select add_months(sysdate,1) from dual;last_day(x),返回日期x当前月最后一天是几号
select last_day(sysdate) from dual;
months_between(x,y),返回x,y两个日期相差的月份,x-y
select months_between(sysdate,add_months(sysdate,1)) from dual; select months_between(add_months(sysdate,1),sysdate) from dual;
round(x, y),将x四舍五入到y指定的单位
select round(sysdate,'month') from dual;
trunc(x,y),将x按y的单位截取
select trunc(sysdate,'month') from dual;
next_day(x,y),计算指定日期x后第y个星期几对应的日期
select next_day(sysdate,'星期一') from dual;--结果为当前日期下周一是的号数
1.4 转换函数
to_number(),字符串--》数值
select to_number('123') from dual;
to_date(),字符串--》日期
select to_date('20160220','yyyy-MM-dd') from dual;--2016/2/20
to_char(),日期--》字符串
select to_char(sysdate,'yyyy-MM-dd') from dual;
1.5 通用函数(对数据类型使用没有限制)
nvl(x,y),如果x为null,结果为y,如果x不为null,结果为x
select nvl(1,2) from dual;--结果1 select nvl(null,2) from dual;--结果2
nvl2(x,y,z),如果x为null,结果为z,如果x不为null,结果为y
select nvl2(null,1,2) from dual;--结果2 select nvl2(0,1,2) from dual;--结果1
nullif(x,y),如果x与y相等结果为null,x与y不相等结果为x
select nullif(1,2) from dual;--结果为1 select nullif(1,1) from dual;--结果为null
case ,就跟if...else if...else if....(多个else if)else...含义一样
select case when 1=1 then 'true' else 'false' end from dual; --含义if 1=1 那么就是true,else 为false。注意end 作为收尾 select case when 1=2 then 'false' when 1=3 then 'false' when 1=4 then 'false' else 'true' end from dual;--此处仅用于说明可以跟多个when
decode()
select decode( 1,1,'true', 2,'false', 'false' ) from dual;--if 1==1 true,else if 1==2 false,else false
2.多行函数
2.1 分组函数
avg(),求平均值
count(),计算数量
sum(),求和
max(),求最大值
min(),求最小值
create table mytest( id number(11) primary key, name varchar2(10), age number(3) ) insert into mytest values(1,'one',18); insert into mytest values(2,'two',20); insert into mytest values(3,'three',22); commit; select avg(age),max(age),min(age),sum(age),count(id) from mytest;
结果如下:
总结:函数之间可以根据使用实际需要进行合适的组合,达到目标