数据处理函数又被称为单行处理函数
单行处理函数的特点:一个输入对应一个输出。
和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)
常见的单行处理行数
lower 转换小写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 转换大写select upper(name) as name from t_student;
substr 取子串(substr( 被截取的字符串, 起始下标,截取的长度))select substr(ename, 1, 1) as ename from emp;注意:起始下标从1开始,没有0.
LEFT (string2 ,length )从 string2 中的左边起取 length 个字符
RIGHT (string2 ,length ) 从 string2 中的右边起取 length 个字符
找出员工名字第一个字母是A的员工信息?第一种方式:模糊查询select ename from emp where ename like 'A%';第二种方式:substr函数select ename from emp where substr(ename,1,1) = 'A';
学生名字首字母大写?
select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;
注意:字符串拼接一定要用concat而不能用+
像这样不行:select upper(substr(name,1,1)) + substr(name,2,length(name) - 1) from t_student;
concat函数进行字符串的拼接select concat(empno,ename) from emp;
可以拼接多个concat(……,……,……)
length 取长度select length(ename) enamelength from emp;
trim 去两边空格
select * from emp where ename = trim(' KING');
RTrim切除右边的空格,LTrim切除左边的空格
str_to_date 将字符串转换成日期 date_format 格式化日期 format 设置千分位
(后面讲)
一个诡异的现象
select 'abc' as bieming from emp; // select后面直接跟“字面量/字面值”
+---------+ | bieming | +---------+ | abc | | abc | | abc | | abc | | abc | | abc | | abc | | abc | | abc | | abc | | abc | | abc | | abc | | abc | +---------+
select abc from emp; ERROR 1054 (42S22): Unknown column 'abc' in 'field list' 这样肯定报错,因为会把abc当做一个字段的名字,去emp表中找abc字段去了。
结论:select后面可以跟某个表的字段名(可以等同看做变量名),也可以跟字面量/字面值(数据)。select 21000 as num from dept;// 21000也是被当做一个字面量/字面值。
+-------+ | num | +-------+ | 21000 | | 21000 | | 21000 | | 21000 | +-------+
round(要操作的数, 保留几位小数) 四舍五入
select round(21000.4, 0) as num from dept; //结果和上面一样
select round(1236.567, -1); // 保留到十位。
rand() 生成随机数 在 0 ≤ 随机数 ≤ 1.0 select floor(rand()*100); // 100以内的随机数
如果使用 rand(seed) 返回随机数, 范围 0 ≤ 随机数 ≤ 1.0, 如果 seed 不变,多次执行返回的结果也是不变的
ifnull是空处理函数。专门处理空的,可以将 null 转换成一个具体值
在所有的数据库当中,只要有null参与了数学运算,最终结果就是NULL
计算每个员工的年薪?
select ename, (sal + ifnull(comm, 0))*12 year_sal from emp;
case..when..then..when..then..else..end 当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。 (注意:不修改数据库,只是将查询结果显示为工资上调) select ename, job, sal as oldsal, (case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal from emp;
select 后可以不接from 当作简单的测试工具
等同于接了from dual;
dual为 亚元表, 系统表 可以作为测试表使用
select round(3.14, 3);
+----------------+ | round(3.14, 3) | +----------------+ | 3.140 | +----------------+
select concat('13','57','9');
+-----------------------+ | concat('13','57','9') | +-----------------------+ | 13579 | +-----------------------+