数据处理函数又被称为单行处理函数
单行处理函数的特点:一个输入对应一个输出。
和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应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 |
+-----------------------+