数学函数
select abs(-10) from dual; 取绝对值
select bin(10) from dual; 转二进制
select ceiling(1.1) from dual; 向上取整 如果是整数返回原值
select conv(8, 10, 2) from dual; 进制转换 可以指定转换前与转换后的进制
select floor(1.1) from dual; 向下取整
select format(3.141592654, 3) from dual; 取小数位 保留时采取四舍五入的方式
select least(min(empno), min(deptno)) from emp; least 求括号中的最小值 min用于求列 least用于求括号中的数 而二者都不能串用
select rand() from dual; 生成一个随机数
时间日期相关函数
select datediff(now(),'2022-10-23 10:26:25') from dual; 计算两个日期之间相差多少天
delete from mes where date_add(send_time, interval 5 minute) >= now(); 删除发送时间距离现在大于五分钟的数据
select * from mes where send_time >= date_sub(now(), interval 15 minute); 查找在15分钟内发送的消息
select timediff(now(), '2024-2-13 10:12:32') from dual;
加密函数
select user() from dual; 查询mysql登录的用户
select database() from dual; 查询目前在使用哪个数据库
create table zhl_users(id int,name varchar(12) not null default '',pwd char(32) not null default '');
insert into zhl_users values(100, '周宏亮', md5('123456')); 密码使用md5 加密
插入后查询看到的密码是经过md5加密后的
如果需要查询也需要将密码加密才能查到
select * from zhl_users where name = '周宏亮' and pwd = md5('123456');
流程控制语句
select ename, if(comm is not null, comm, 0.0) from emp;
select ename, if(comm is null, 0.0, comm) from emp;
`select ename,
(case
when job = 'CLERK' then '职员'
when job = 'MANAGER' then '经理'
when job = 'SALESMAN' then '销售'
else job
end) as job
from emp;`
查询增强
预览一下该表
时间比较
查找1992.1.1后入职的员工
select * from emp where hiredate > '1992-01-01';
时间也可以比较 需要主义格式
like使用
模糊查询
%:表示0到多个任意字符串
_:表示单个字符
如何显示首字符为s的员工姓名和工资
select ename, sal from emp where ename like 'S%';
如何显示第三个字符为大写O的所有员工的姓名和工资
select ename, sal from emp where ename like '__O%';
order by子句的使用
按照部门号升序而雇员的工资降序排列,显示雇员信息
select * from emp order by deptno, sal desc;