mysql常用函数

MYSQL常用函数

一、单行函数

1.1 字符函数(String)

length(str):统计字符串的字节数(取决于编码方式,utf8汉字3字节,gbk汉字2字节)
select length(’ abcdefg ')
select * from emp where length(ename)=5

concat(str1, str2):拼接字符
select concat(‘aaa’,‘bbb’)
select concat(empno,concat(‘_’,ename)) from emp

substr/substring(str, n1 [,n2]):切割字符,n1起始位置(mysql下标从1开始),n2可选,表示切割长度
select substr(‘I like java!’,3)
select substr(‘I like java!’,3 , 1) – 第二个参数表示截取几个
select substring(‘I like java!’ ,3 , 4)
select substr(ename,1,3) from emp

instr(str1, str2):返回str2在str1中首次出现的位置;如果没有找到,则返回0。不区分大小写。
select instr(‘i like java’,‘java’)
select instr(‘i like java’,‘b’)
select * from emp where instr(ename,‘A’)=0

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)
select trim(’ aaa ') – 去除两边的空格
select trim(LEADING ‘x’ from ‘xxxaaaxxx’) – 去除左边的空格
select trim(TRAILING ‘x’ from ‘xxxaaaxxx’) – 去除右边的空格
select trim(BOTH ‘x’ from ‘xxaxaaaxaxx’) – 去除两边的空格

upper(str):字母变大写
select upper(‘aaaa’)

lower(str):字母变小写
select lower(‘BBBB’)

lpad(str1,length,str2)。其中str1是第一个字符串,length是结果字符串的长度,str2是一个填充字符串。如果str1的长度没有length那么长,则使用str2填充;如果str1的长度大于length,则截断。
select lpad(‘lifan’, 10 , ’ ')
select lpad(ename,10,’ ') from emp

rpad(str1, length, str2):参考lpad
select rpad(ename,10,’ ‘),length(rpad(ename,10,’ ')) from emp

replace(object,search,replace):把object对象中出现的的search全部替换成replace。
select replace(‘i like java’,‘a’,‘A’)

1.2 数学函数(Math)

round(num, 2):四舍五入,保留两位小数
select round(12.5678,2)

ceil(num):向上取整
select ceil(-10.1)

floor(num):向下取整
select floor(-9.1)

truncate(num, 2):从小数点后两位直接截断,比如truncate(3.1415926, 3) = 3.141
select truncate(12.5698,2)

mod(num, 2):求余数 num % 2
select mod(10,3)

1.3 日期函数(Date)

now():当前系统时间,1997-06-03 19:23:12

select now()
select SYSDATE()

curdate():当前系统时间的日期,1997-06-03
select curdate()

curtime():当前系统时间的时间,19:23:12
select curtime()

year(x):年份,1997
select year(hiredate) from emp
select * from emp where year(hiredate)=1981

month(x):月,6
select * from emp where month(hiredate)=2
select month(now())

monthname():英文形式,June
select monthname(now())

day():日, 3
select day(now())

hour():小时, 19
select hour(now())

minute():分钟, 23
select minute(now())

second():秒, 12
select second(now())

– 字符串转日期
str_to_date(“1997-06-03 19:23:12”, “%Y-%m-%d %H:%i:%s”):-- 通过后面的模式将前面的字符串进行转换成date格式
select str_to_date(‘2020-01-01’,‘%Y-%m-%d’)
insert into emp(empno,hiredate) values(1111,‘2022-01-01’)
select * from emp

– 日期转字符串
date_format(‘1997/6/3’, ‘%Y年%m月%d日’):将日期转为字符,1997年6月3日
select DATE_FORMAT(‘2022-01-01’,‘%Y年%m月%d日’)

datediff(date1, date2) – 获取2个日期之间的差 单位:天
select DATEDIFF(‘2020-03-01’,‘2020-02-01’)
select DATEDIFF(‘2022-09-08 15:34:20’,‘2022-09-08 00:00:00’)
select now()-STR_TO_DATE(‘2020-01-01’,‘%Y-%m-%d’)

1.4 控制函数

if:类似于三元运算符
case:
第一种情况:类似于switch…case…

1.5 其他函数
version:版本
database:当前数据库
user:当前用户

二、分组函数/聚合函数
功能:用作统计使用,又称为聚合函数或统计函数或组函数。
– 单组
select max(sal) from emp – 最大
select min(sal) from emp – 最小
select sum(sal) from emp – 总和
select avg(sal) from emp – 平均
select count(*) from emp – 记录行
select count(comm) from emp – 统计记录行字段为null则不统计
select count(distinct job) from emp – distinct 去除重复数据

– 多组 group by 分组字段
select 分组字段,聚合函数 from 表 group by 分组字段

– 示例 : 按部门统计每个部门的最高工资最低工资

select deptno,max(sal),min(sal) from emp group by deptno

– 示例 : 安装工作类别统计每个工作类别的平均工资

select job,avg(sal) from emp group by job

– 示例 : 统计每个部门有多少人

select deptno,count(*) from emp group by deptno

– 聚合函数作为查询条件不能写在where后的 必须写到having 后

– 示例 : 统计每个部门的平均工资,查询那些超过2000的部门

select deptno,avg(sal) from emp group by deptno having avg(sal)>2000

select * from (select deptno,avg(sal) avgsal from emp group by deptno) a where a.avgsal>2000

– 排序 order by 排序字段 [asc默认/desc]

select * from emp order by sal desc,empno desc

– sql书写顺序

select * fromwhere 条件 group by 分组 having 分组条件 order by 排序

– 别名 不能直接用于查询条件(子查询可以的) 但是可以用于排序

select empno 编号,ename 姓名,job 工作 from emp order by 编号 desc

select * from (select empno 编号,ename 姓名,job 工作 from emp) a where a.编号=7788

– 示例 统计男女人数

select sex,count(*) from student group by sex

– 示例 统计名称重复的有哪些(统计重复数据)

select name,count(*) from student group by name having count(*)>1

1、查询出部门编号为30中的所有雇员信息。

select * from emp where deptno=30

2、列出所有办事员(CLERK)的姓名、编号和部门。

select ename,empno,deptno from emp where job='CLERK'

3、找出佣金高于薪金的雇员

select * from emp where comm>sal

4、找出佣金高于薪金60%的雇员

select * from emp where comm>sal*0.6

5、找出部门10中所有经理和部门20中所有办事员的详细资料

select * from emp where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK')

6、找出部门10中所有经理、部门20中所有办事员以及既不是经理又不是办事员但其薪金大于或等于2000的所有雇员的详细资料

select * from emp where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK') or
(job!='MANAGER' and job!='CLERK' and sal>=2000)

7、找出收取佣金的雇员的不同工作

select distinct job from emp where comm is not null

8、找出不收取佣金或收取的佣金低于100的雇员

select * from emp where comm is null or comm<100

9、找出名称中包含“A”的所有雇员

select * from emp where ename like '%A%'
select * from emp where instr(ename,'A')!=0

10、找出薪资在2000-3000之间的雇员

select * from emp where sal>=2000 and sal<=3000
select * from emp where sal between 2000 and 3000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值