Oracle - 函数
一、单行函数
1、单行函数的特点:
> 操作数据对象
> 接收参数返回一个结果
> 只对一行进行变换
> 每行返回一个结果
> 可以转换数据类型
> 可以嵌套
> 参数可以是一列或一个值
2、按函数的作用分类:
> 字符
> 大小写控制函数
> lower():将传入的字符串全部转换为小写返回
> upper():将传入的字符串全部转换为大写返回
> initcap():将传入字符串 按空格分成若干个单词,每个单词首字母大写
> 字符控制函数
> concat(str1, str2):将传入的两个字符串拼接成一个字符串
> substr(str, 1,5):截取字符串str的[1,5]个字符,组成一个新的字符串,字符串下标从1开始
> length(str):返回字符串的长度
> instr(str, char):返回字符串str中char字符第一次出现的下标
> lpad(' Hello ', 10, ' * '):左侧填充,效果为 ' *****Hello '
>
rpad(' Hello ', 10, ' * '):右侧填充,效果为 ' Hello***** '
> trim(' H ' from ' Hello '):去掉字符串Hello的H字符,去掉后的效果是:' ello '
> replace(str, char1, char2):将字符串 str 中的 char1字符改为 char2字符
> 数值
> round(double number, int n):四舍五入,并保留小数点后 n位
> trunc(double number, int n):截断,意思就是保留小数点后 n位
> mod(100, 30):求余,100 % 30 = 10
> 日期(Oracle中的日期其实包含日期和时间两个值)
> 日期表示:年(yyyy)、月(mm)、日(dd)、星期(day)、小时(hh)、分钟(mi)、秒(ss)
>
months_between(‘01-SEP-95’,‘11-JAN-94’):两个日期相差的月数,结果为:19.6774194
> add_months(‘11-JAN-94’,int n):向指定的日期中添加 n个月,n=6时:‘11-JVL-94’
> next_day(‘11-JAN-94’,‘FRIDAY’):指定日期的下一个星期对应的日期,‘18-JAN-94’
> last_day(‘11-JAN-94’):本月的最后一天,结果为:‘30-JAN-94’
> round():日期四舍五入
> round(‘26-JVL-94’,‘MONTH’):按月四舍五入,结果为:‘01-AUG-94’
> round(‘26-JVL-94’,‘YEAR’):按年四舍五入,结果为:‘01-JAN-95’
> trunc():日期截断
> trunc(‘26-JVL-94’,‘MONTH’):按月截断,结果为:‘01-JVL-94’
> trunc(‘26-JVL-94’,‘YEAR’):按年截断,结果为:‘01-JAN-94’
> 转换
>
隐示数据类型转换
> varchar2 or char ==> number
> varchar2 or char ==> date
> number ==> varchar2
> date ==> varchar2
> 显示数据类型转换
> to_char(date,‘字符格式’):对date到char的转换,①日期必须包含在单引号中而且大小写敏感
②可以包含任意的有效的日期格式、③日期之间用逗号隔开、④使用双引号向日期中添加字符
> to_date(char,‘日期格式’):对char到date的转换,将字符格式的时间转换为时间格式
> to_number(char, '数字格式'):对char到number的转换,比如将char中的‘¥’转换为‘L’
> to_char(number,‘字符格式’):对number到char的转换,这里经常使用的几种格式为:
数字(9)、零(0)、美元符($)、本地货币符号(L)、小数点(.)、千位符(,)
> 通用:这些函数适用于任何数据类型,包括空值
>
nvl(expr1, expr2):如果expr1是空值,则将其转换为expr2中的值,可以使用的数据类型有:
日期、字符、数字
> nvl2(expr1, expr2, expr3):expr1 不为null,返回expr2,为null,返回expr3
> nullif(expr1, expr2):相等返回null,不等返回expr1
> coalesce(expr1, expr2, ..., exprn):它的优点是,可以同时处理交替的多个值,如果第一个表达式
为null,则返回下一个表达式,对其他参数进行 coalesce
3、条件表达式:在SQL中使用 if - then - else 逻辑,使用两种方法:case表达式、decode函数
> case 表达式:
select 字段a, 字段b,
case id
where id=10
then return_name1
where id=10
then return_name2
else return_name2
end "起一个别名"
from tablename;
> deocode 函数
select 字段a, 字段b,
decode(id, '10', return_name1,
'20' return_name2,
'30' return_name3,
return_name4)
"起一个别名"
from tablename;
含义:如果id为10,返回return_name1,如果id为20,返回return_name2,如果id为30,返回return_name3,
其他则返回return_name4
4、嵌套函数:多行函数可以嵌套,嵌套函数的执行顺序是由内到外
二、组函数
1、组函数类型:
> avg():求一组数的平均值,只能针对数值类型
> count(expr):返回expr不为空(NULL)的个数
> count(distinct expr):返回expr非空,且不重复的记录总数
> max():最大值,也可以比较字符大小,按ASCII码比较
> min():最小值
> stddev():
> sum():总和,只能针对数值类型
> avg(money) = sum(money) / count(money)
2、非法使用组函数:
> 不能在 where 子句中使用组函数
> 可以在 having 子句中使用组函数