0%

MySQL函数

MySQL函数

字符函数

length字节个数

1
select length('john');

concat拼接字符串

1
2
3
4
5
select concat('I',' ','like',' ','mysql');
-- concat_ws可以指定分隔符进行拼接,第一个字符为所指定的分隔符
select concat_ws(' ','I','like','mysql');

-- 两这结果都是I like mysql

group_concat创建分隔列表

1
2
3
4
-- GROUP_CONCAT负责将item_id拼接起来,是一个聚合函数,所以需要使用group by
-- 结果是根据app_id分组,将app_id下的所有item_id使用逗号分隔开全部展示出来
select app_id,GROUP_CONCAT(item_id separator ',') as item_ids from app_video
group by app_id

upper/lower大小写转换

1
2
select upper('mysql');
select lower('MySQL');

substr/substring字符串截取

1
2
3
4
#从第几个字符开始截取,注意:索引从1开始
select substr('I like MySQL',8);
#从第几个字符开始截取,截取几个字符
select substr('I like MySQL',8,2);

substring_index字符拆分

1
2
3
4
5
6
7
-- 第一个参数str  要处理的字符串
-- 第二个参数delim 分割符
-- 第三个参数count 计数 如果为正数,则从左开始数,如果为负数,则从右开始数
select substring_index('aaa:bbb:2',':',1); -- aaa
select substring_index('aaa:bbb:2',':',2); -- aaa:bbb
select substring_index('aaa:bbb:2',':',-1); -- 2
select substring_index('aaa:bbb:2',':',-2); -- bbb:2

instr子串在字符串中的起始索引

1
select instr('I like MySQL','MySQL');

trim去掉前后空格

1
2
3
select trim(' My SQL ');
-- ltrim 表示去除前面空格
-- rtrim 表示去除后面空格

lpad用指定字符进行左填充达到指定长度

1
select lpad('MySQL',8,'*');

rpad用指定字符进行右填充达到指定长度

1
select rpad('MySQL',8,'*');

replace替换

1
select replace('aabb','bb','cc');

left字符串前几个字符

1
2
-- qw
select left('qwer',2)

right字符串后几个字符

1
2
-- er
select right('qwer',2)

reverse反转

1
2
-- rewq
select reverse('qwer')

coalesce返回非null值

coalesce函数可以指定一个或多个参数,会返回参数列表中第一个非null值

1
select coalesce(imagesJson,"aa") from doc where imagesJson is null

数学函数

avg平均值

1
select avg(sal) as avg_sal from emp

max最大值

1
select max(sal) as max_sal from emp

min最小值

1
select min(sal) as min_sal from emp

sum求和

1
select sum(sal) as sum_sal from emp

abs绝对值

1
select abs(-10);

round四舍五入

1
2
3
select round(1.4);
#小数点后保留几位
select round(1.567,2);

ceil向上取整

1
select ceil(1.2);

floor向下取整

1
select floor(1.2);

truncate截断(小数点后保留几位)

1
select truncate(1.61,2);

mod取模

1
select mod(10,3);

format数字格式化

1
2
-- 保留一位小数
select format(123.21,1);

日期函数

获取当前时间戳毫秒

1
select unix_timestamp(now())*1000;

now返回当前系统时间

1
select now();

curdate返回当前系统日期,不包含时间

1
select curdate();

curtime返回当前系统时间

1
select curtime();

获取指定的部分

1
2
select year('2020-10-10');
select month('2020-10-10');

date_add添加或减少时间

1
2
3
4
5
6
7
8
9
-- 减五天
select date_add(hiredate,interval -5 day) from emp
-- 加五天
select date_add(hiredate,interval 5 day) from emp

-- 减五年
select date_add(hiredate,interval -5 year) from emp
-- 加五年
select date_add(hiredate,interval 5 year) from emp

str_to_date 将日期格式的字符转换成指定格式的日期

1
select str_to_date('2020年10月12','%Y年%m月%d');

date_format将日期转换为字符

1
select date_format('2020/10/12','%Y-%m-%d');

毫秒时间戳转为正常时间

1
select FROM_UNIXTIME(1387189325000/1000);

获取当天0点

1
SELECT DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s');-- 2015-09-28 00:00:00

聚合函数

聚合函数有sum()求和、avg()平均值、max()最大值、min()最小值、count()数量等

加密算法

md5()使用MD5加密算法

1
2
3
4
5
6
 select md5(123);
+----------------------------------+
| md5(123) |
+----------------------------------+
| 202cb962ac59075b964b07152d234b70 |
+----------------------------------+

password()使用密码算法

1
2
3
4
5
6
select password(123);
+-------------------------------------------+
| password(123) |
+-------------------------------------------+
| *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-------------------------------------------+

流程控制

流程控制结构分为顺序结构、分支结构、循环结构

顺序结构

从上往下依次执行

分支结构

从两条或多条分支选择一条执行

if函数 if-else效果
1
2
#语法 if(表达式1,表达式2,表达式3)  表达式1成立,则执行表达式2,否则执行表达式3
select if(6<3,'小于','大于');
case函数
相当于switch-case
1
2
3
4
5
6
7
#语法
case 表达式|变量|字段
when 要判断的值 then 结果
when 要判断的值 then 结果
...
else result
end
相当于多重if语句
1
2
3
4
5
6
7
#语法
case
when 要判断的条件 then 结果
when 要判断的条件 then 结果
...
else result
end
if结构
1
2
3
4
5
#语法
if 条件1 then 语句1;
elseif 条件2 then 语句2;
else 语句;
end if;

循环结构

在满足一定的条件下,重复执行一段代码

循环控制

  • iterate 类似于continue
  • leave 类似于break
while结构
1
2
3
【标签:】while 循环条件 do
循环体
end while 【标签】;
loop结构
1
2
3
【标签:】loop
循环体
end loop 【标签】;
repeat结构
1
2
3
4
【标签:】 repeat 
循环体
until 捷顺循环的条件
end repeat 【标签】;

聚合函数

sum求和

1
select sum(salary) from employees;

avg平均值

1
select avg(salary) from employees;

max最大值

1
select max(salary) from employees;

min最小值

1
select min(salary) from employees;

count个数

1
select count(id) from users;

count(*)对行的数目进行计算,包含NULL
count(column)对特定的列的值具有的行数进行计算,不包含NULL值。
count(1)这个用法和count(*)的结果是一样的

使用count(*)即可

如果表没有主键,那么count(1)count(*)
如果有主键,那么count(主键,联合主键)count(*)
如果表只有一个字段,count(*)最快
count(1)跟count(主键)一样,只扫描主键。count(*)count(非主键)一样,扫描整个表。明显前者更快一些

欢迎关注我的其它发布渠道