数据库在标准的SQL语法基础上扩展了一些函数用于进行数据处理或复杂计算,通过对一组数据进行计算得到最终需要的输出结果,为独立的程序单元,无须任何调用者,可直接执行.以下以MySQL数据库为例
一般会有一个到多个输入,这些输入被称为函数的参数,函数内部对参数进行判断和计算,获取最终的一个值作为结果
函数一般会出现在select之后以及where子句之中
数据库函数分为单行函数以及多行函数
- 单行函数----对每行输入值单独计算,每行得到一个计算结果返回给用户
- 多行函数----对多行输入值整体计算,最后只有一个结果
单行函数的有以下特征
- 参数可以为变量、常量,甚至是数据列,接收多个参数,只返回一个值
- 对每行单独起作用,每行可以有多个参数,但最终只有一个返回结果’
- 改变参数的数据类型,支持嵌套作用—内函数的返回结果可以为外函数的参数
每个数据库都有大量的单行函数,存在一定差异,但会为一些常用的计算功能提供相应的函数,函数名与用法可能不尽相同,但万变不离其宗,功能上还是相类似的
#计算某一列的字符长度
select char_length(列名) from 表名
#计算某一列的字符长度对应的三角函数值
select sin(char_length(列名)) from 表名
#为某一时间添加上特定的时间 interval后面为指定添加的时间数值 之后为添加的时间单位
select DATE_ADD('time' , interval 数值 单位)
#获取当前日期
select CURDATE();
#获取当前时间
select curtime();
以下为处理null的函数
- ifnull(expr1,expr2)—当expr1为null,则返回expr2,否则返回expr1
#如果stu_name 列为null 则返回'没有学生'
select ifnull(stu_name,'没有学生') from student
- nullif(expr1,expr2)—当expr1与expr2相等,则返回null,否则返回expr1
#如果stu_name 列等于'小明'则返回null
select nullif(stu_name,'小明') from student
- if(expr1,expr2,expr3)—类似三目运算,当expr1为true,不等于0且不为null,则返回expr2,否则返回expr3
#当stu_name列不为null,则返回有名字,否则返回没有名字
select if(isnull(stu_name),'没有姓名','有名字') from student
MySQL提供了一个流程控制函数,使用case关键字调用该函数
- 第一个语法如下
case value
when compare_val1 then result1
when compare_val2 then result2
else result
end
意思为case后面的value依次与when子句中的compare_val1、compare_val2 …相比较,如果相等,则返回compare_valN对应的resultN,否则返回紧接else后的result
select goods_name ,case good_price
when 1 then '矿泉水'
when 2 then '百事可乐'
else '冰红茶'
end
from good;
- case的第二个语法如下
case
when condition1 then result1
when condition2 then result2
else result
end
此处condition为返回值为boolean值的条件表达式
select good_name ,case
when good_price >= 4 then '冰红茶'
when good_price <= 2 then '矿泉水'
else '百事可乐'
end
from good;;