目录
nvl---空值处理,如果第一位是null值,就使用第二位数值
decode---条件取值,可以理解为 switch case,或者理解为SQL里的 case when then else end
函数的分类
Oracle的函数分为单行函数和多行函数
单行函数
作用于一行,只返回一个值
字符函数
upper---小写变大写
select upper('hi oracle') from dual;
lower---大写变小写
select lower('hi oracle') from dual;
length---求字符串长度
select length(goodsname) as length from goodsinfos where rownum < 2;
select length('hello') from dual;
substr---截取字符串
select substr('hello', 2, 2) from dual;
截取字符串,从第几位开始,截取几位,注意,这个字符串的计数是从1开始的,不是从0开始的
concat---拼接字符串
select concat('hello ', 'oracle') from dual;
注意,拼接只支持两个部分,如果想要拼接更多的,那就只能嵌套拼接
如果想要拼接多个部分,可以使用 '||',注意,不是或,是 || ,拼接 ,要知道SQL是另一种语言,你在别的地方代表或,在SQL并不是
select 'hello' || ',' ||'oracle' from dual;
数值函数
round---四舍五入
select round(99.99) from dual;
select round(99.123456, 4) from dual;
第二个参数代表保留的小数位数
trunc---去尾(截取)
select trunc(99.123456, 1) from dual;
select trunc(99.123456, 3) from dual;
mod---取余
select mod(99, 2) from dual;
日期函数
sysdate--当前时间
select sysdate from dual;
时间可以直接相减相加,单位是天
select sysdate - 1 from dual;
select sysdate + 1 from dual;
months_between---两个时间之间相差的月份
select months_between(sysdate, CREATE_TIME) from goods_orders;
add_months---加指定数量月份
select add_months(sysdate, 1) from dual;
当然,也可以加负数,那就是减月份了
select add_months(sysdate, -1) from dual;
last_day---求指定月的最后一天日期
select last_day(sysdate) from dual;
如果想算上个月,那就这样写
select last_day(sysdate - 16) from dual;
转换函数
to_date---字符串转换为日期
select to_date('20210512102616', 'yyyy-mm-dd hh:mi:ss') from dual;
to_number---字符串转数字
select to_number('99') + to_number('100') from dual;
to_char---数字转换为字符串
select to_char(199) from dual;
to_char---日期转换为指定格式的字符串
select to_char(sysdate, 'yyyymmddhhmiss') from dual;
如果想让小时变成24小时制的,可以在hh后边加上24
select to_char(sysdate, 'yyyymmddhh24miss') from dual;
其他函数
nvl---空值处理,如果第一位是null值,就使用第二位数值
这个函数有什么用呢,看这个SQL,猜猜看执行结果是什么
select 1 + null from dual;
错,结果不是1,是null,null参与的任何运算,结果都是null
想要避免这种情况,可以使用nvl函数
select 1 + nvl(null, 0) from dual;
select 1 + nvl(null, 10) from dual;
decode---条件取值,可以理解为 switch case,或者理解为SQL里的 case when then else end
select decode('hello', '1', '2' ,'hello', 'oracle', '没有匹配到') from dual;
执行结果如下
这个函数的解释就是 decode (等待匹配值,匹配值1,匹配值1如果匹配成功返回的结果,匹配值2,匹配值2如果匹配成功返回的结果,匹配值n,匹配值n如果匹配成功返回的结果,如果匹配不成功返回这个结果)
上面是匹配成功的,这次我们试试不成功的
select decode('hello', '1', '2' ,'hello啊', 'oracle', '没有匹配到') from dual;
多行(聚合)函数
作用于多行,只返回一个值
count---统计数量
select count(1) from goodsinfos;
max---最大值
select max(id) from goodsinfos;
min---最小值
select min(id) from goodsinfos;
avg---平均值
select avg(id) from goodsinfos;
sum---求和
select sum(id) from goodsinfos;