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

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')

数学函数

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);

日期函数

now返回当前系统时间

1
select now();

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

1
select curdate();

curtime返回当前系统时间

1
select curtime();

获取指定的部分

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

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');

聚合函数

聚合函数有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(非主键)一样,扫描整个表。明显前者更快一些