相信大家在做一些SQL的代码题时,看题解,很多都用到了MySQL中自带的库函数,今天就来简单说一些MySQL中的常用函数,用起来也是很简单的。
控制流程函数,其实就是我们平时写Java代码中,所使用的if else语句。只是这里的写法稍微有点不一样而已。如下:
-- 用法
case 参数名
when 比较值 then 执行操作
when 比较值 then 执行操作
else 执行操作
end -- end表示控制流程函数 结束
举个实际的例子:这是一张员工表,
-- 现在公司有3个部门,集体涨薪水,
-- 涨幅是 部门1涨10%, 部门2涨20%, 部门3涨30%,其他部门涨50%
-- 输出涨薪后,每个人的薪水是多少?
select ename, deptno,sal,
case deptno -- 以部门作为判断值
when 部门1 then sal * 1.1 -- 涨10%
when 部门2 then sal * 1.2 -- 涨20%
when 部门3 then sal * 1.3 -- 涨30%
else sal * 1.5 -- 涨50%
end as newSal -- 表示控制流程函数结束
from emp;
这就是case when的用法,和if else 如初一则,很简单的。一般我们这样使用,会将这个结果起一个别名(as newSal)
,以这个新的别名作为列名。如果不起别名,默认的会将整个函数语句作为列名,显得比较长。
MySQL中的三目操作符if(expr1, expr2, expr3)。
MySQL中也是有三目操作符的,类似于Java中的 num1 == num2? num1 : num2
。如下用法:
-- 查询表中,所有人的comm(绩效奖金),为null时,输出0
select ename, if(comm is null, 0, comm) from emp;
concat(str1, str2)
,字符串拼接,类似于C语言中的strcat()函数。
select concat('hello ','world');
upper(str), lower(str)
,将字符串转换为大小写字母,类似的Java中也是有相应的操作的。
select upper('hello world'); -- 转大写
select lower('HELLO WORLD'); -- 转小写
trim(str)
, 去除字符串的前后空格。
select trim(' hello '); -- 去除前后的空格
select ltrim(' hello '); -- 去除左侧的空格
select rtrim(' hello '); -- 去除右侧的空格
substring(str, index, len)
,截取字符串,切记index是从1开始计数的,而不是我们习惯的下标0。
select substring('hello world', 1, 5); -- 输出hello
length(str)
,计算字符串的长度
select length('hello');
instr(主串,子串)
,返回子串在主串中的位置。类似于Java中的indexOf方法。
select instr('hello world', 'world'); -- 输出7
round(N, X)
,将N四舍五入,小数点后保留X位。
select round(20.1112, 2); -- 输出20.11
select round(20.1152, 2); -- 输出20.12
truncate(N, X)
,截断。对N进行截断,小数点后保留X位。
select truncate(20.111, 2); -- 输出20.11
select truncate(20.117, 2); -- 输出20.11
mod(N, X)
,取模运算,N % X。
select mod(10, 4); -- 输出2
ceil(N)
,向上取整。N是一个double类型的参数。
select ceil(20.111); -- 输出21
select ceil(20.911); -- 输出21
floor(N)
,向下取整。N是一个double类型的参数。
select floor(20.999); -- 输出20
select floor(20.5); -- 输出20
abs(N)
,取绝对值。
select abs(-21); -- 输出21
select abs(-20.5); -- 输出20.5
sign(N)
,判断正负数。正数返回1,负数返回-1,0返回0
select sign(-100); -- 输出-1
select sign(100); -- 输出1
select sign(0); -- 输出0
power(X, Y)
,计算X的Y次幂。
select power(2, 3); -- 2的3次幂,输出8
current_time()
,输出当前的时间。
select current_time(); -- 输出17:23:00
current_date()
,输出当前的日期。
select current_date(); -- 输出2022-04-07
current_timestamp()
,输出当前的日期和时间。
select current_timestamp(); -- 输出2022-04-07 17:23:00
MySQL中也是支持位运算的,比如按位与、按位或、按位异或等等。
select 20 & 21;
select 20 | 21;
select 20 ^ 21;
select 20 << 1;
select 20 >> 1;
select 2 & (~2 + 1);
select bit_count(20); -- 计算20的二进制中,有多少个1
聚合函数,也叫组函数,经常搭配着分组查询(group by)来使用。
select count(*) from emp; --统计行数,参数可以填列号,列名或*
select max(sal) from emp; --计算sal最大的是多少
select min(sal) from emp; --计算sal最小的是多少
select avg(sal) from emp; --计算sal的平均值
select sum(sal) from emp; --计算sal的总和