数据处理函数又被称为单行处理函数
单行处理函数的特点:一个输入对应一个输出。单行处理函数常见://lower 转换小写mysql> select lower(ename) as ename from emp;+--------+| ename |+--------+| smith || allen || ward || jones || martin || blake || clark || scott || king || turner || adams || james || ford || miller |+--------+14个输入就有14个输出//upper 转换大写mysql> select upper(name) as name from t_student;//substr 取子串(substr(被截取的字符串, 起始下标,截取的长度))mysql> select substr(ename, 1, 1) as ename from emp;//SQL语言的起始是从1开始的//concat函数进行字符串的拼接mysql> select concat(empno,ename) from emp;//length 取长度mysql> select length(ename) enamelength from emp;//trim 去空格(去除的是头部和尾部的空格)mysql> select ename,sal from emp where ename =trim(' KING');+-------+---------+| ename | sal |+-------+---------+| KING | 5000.00 |+-------+---------+//str_to_date 将字符串转换成日期//date_format 格式化日期//format 设置千分位//curdate() 返回当前的日期//curtime() 返回当前的时间//now() 返回当前的日期和时间//year(date) 获取指定date的年份//month(date) 获取指定date的月份//day(date) 获取指定date的日期//datediff(date1、date2) 返回起始时间date1 和 结束时间date2 之间的天数//case..when..then..when..then..else..end当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。 (注意:不修改数据库,只是将查询结果显示为工资上调)selectename,job, sal as oldsal,(case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsalfromemp;+--------+-----------+---------+---------+| ename | job | oldsal | newsal |+--------+-----------+---------+---------+| SMITH | CLERK | 800.00 | 800.00 || ALLEN | SALESMAN | 1600.00 | 2400.00 || WARD | SALESMAN | 1250.00 | 1875.00 || JONES | MANAGER | 2975.00 | 3272.50 || MARTIN | SALESMAN | 1250.00 | 1875.00 || BLAKE | MANAGER | 2850.00 | 3135.00 || CLARK | MANAGER | 2450.00 | 2695.00 || SCOTT | ANALYST | 3000.00 | 3000.00 || KING | PRESIDENT | 5000.00 | 5000.00 || TURNER | SALESMAN | 1500.00 | 2250.00 || ADAMS | CLERK | 1100.00 | 1100.00 || JAMES | CLERK | 950.00 | 950.00 || FORD | ANALYST | 3000.00 | 3000.00 || MILLER | CLERK | 1300.00 | 1300.00 |+--------+-----------+---------+---------+//round(x,y) 四舍五入(求参数x的四舍五入的值,保留y位小数)mysql> select 'abc' from dept;+-----+| abc |+-----+| abc || abc || abc || abc |+-----+mysql> select 1234 from dept;+------+| 1234 |+------+| 1234 || 1234 || 1234 || 1234 |+------+//结论:select后面可以跟某个表的的字段名(类似于变量名),也可以跟字面值\字面量mysql> select round(1236.567, 0) as result from emp; //保留整数位。+--------+| result |+--------+| 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 || 1237 |+--------+mysql> select round(1236.567, 1) as result from emp; //保留1个小数mysql> select round(1236.567, 2) as result from emp; //保留2个小数mysql> select round(1236.567, -1) as result from emp; // 保留到十位。//rand() 生成随机数 0~1之间(0,1)开区间0到1mysql> select rand() from dept;+---------------------+| rand() |+---------------------+| 0.3132190455805688 || 0.6032885737747778 || 0.07678576286582812 || 0.574063123738452 |+---------------------+// 100以内的随机数(包括100,因为有round()可以实现四舍五入)mysql> select round(rand()*100,0) from emp;//ifnull 可以将 null 转换成一个具体值ifnull是空处理函数。专门处理空的。在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL。注意:NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。ifnull函数用法:ifnull(数据, 被当做某个值)如果“数据”为NULL的时候,把这个数据结构当做某个值。补助为null时,将补助当做0来处理mysql> select ename,(sal + ifnull(comm,0)) * 12 yearsal from emp;+--------+----------+| ename | yearsal |+--------+----------+| SMITH | 9600.00 || ALLEN | 22800.00 || WARD | 21000.00 || JONES | 35700.00 || MARTIN | 31800.00 || BLAKE | 34200.00 || CLARK | 29400.00 || SCOTT | 36000.00 || KING | 60000.00 || TURNER | 18000.00 || ADAMS | 13200.00 || JAMES | 11400.00 || FORD | 36000.00 || MILLER | 15600.00 |+--------+----------+
流程函数
//if(value,t,f) 如果value为true ,则返回t,否则返回f
//ifnull(value1, value2) 如果value1 不为空,返回value1,否则返回value2
//case when [val1] thenp [res1 ]when..then..else [default] end
//如果val1为true,返回res1,... 否则返回default默认值
//case [expr] when [val1] then [res1] when..then..else [default] end
//如果expr的值等于val1,返回res1,... 否则返回default默认值
