【MySQL】数据处理的瑞士军刀——常用的内置函数(下)

文章目录

  • [1. 数学函数](#1. 数学函数)
    • [1.1 abs():绝对值函数](#1.1 abs():绝对值函数)
    • [1.2 bin():参数转二进制](#1.2 bin():参数转二进制)
    • [1.3 bin():参数转十进制](#1.3 bin():参数转十进制)
    • [1.4 conv(num,from_base,to_base):进制转换](#1.4 conv(num,from_base,to_base):进制转换)
    • [1.5 ceiling():向上取整](#1.5 ceiling():向上取整)
    • [1.6 floor():向下取整](#1.6 floor():向下取整)
    • [1.7 format(number,decimal_places):格式化,保留小数位数](#1.7 format(number,decimal_places):格式化,保留小数位数)
    • [1.8 mod(number,deno):取模](#1.8 mod(number,deno):取模)
    • [1.9 rand():返回随机浮点数,范围[0.0~1.0】](#1.9 rand():返回随机浮点数,范围[0.0~1.0】)
  • [2. 其它函数](#2. 其它函数)
    • [2.1 user() :查询当前用户](#2.1 user() :查询当前用户)
    • [2.2 md5(str):数据指纹](#2.2 md5(str):数据指纹)
    • [2.3 ifnull(val1, val2)](#2.3 ifnull(val1, val2))
  • [3. 实战OJ](#3. 实战OJ)

1. 数学函数

1.1 abs():绝对值函数

例子:

1.2 bin():参数转二进制

例子:

1.3 bin():参数转十进制

例子:

1.4 conv(num,from_base,to_base):进制转换

把数字num从一个进制转(from_base)到另一个进制(to_base):

例如,把6从10进制转换成2进制

sql 复制代码
select conv(6,10,2);

1.5 ceiling():向上取整

sql 复制代码
select ceiling(2.3);

1.6 floor():向下取整

sql 复制代码
select floor(2.7);

1.7 format(number,decimal_places):格式化,保留小数位数

例子:

sql 复制代码
select format(3.1415926,2);

1.8 mod(number,deno):取模

例子:

sql 复制代码
select mod(10,3);

1.9 rand():返回随机浮点数,范围[0.0~1.0】

例子:

sql 复制代码
select rand();

范围是【0.0~1.0】,那如果想生成【0.0~100.0】范围内的小数呢?

乘个100就行了

当然如果嫌后面小数位太多,也可以使用format控制格式:

2. 其它函数

2.1 user() :查询当前用户

sql 复制代码
 select user();

当前我登录的用户是root

2.2 md5(str):数据指纹

下面通过一个场景给大家讲解:

数据库一般在保存一些用户的比如某个应用的账号密码时,密码通常是不能明文保存的。如果明文保存的话,万一你这个表被别人盗取了,那用户的密码就全部泄露了,所以保存的密码通常会进行加密。
比如:
我们先来建一张表

然后我们插入一些数据

插入的密码如果不做处理,直接插入明文保存。那么如果你的表被别人拿到,那直接就可以查看密码。
所以这样是不安全的。
那md5(str)这个函数就可以派上用场了。
md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串(数据指纹)

这样我们存入的就不是真正的密码,而是密码的MD5 值。不论密码多长,最终得到的都是一个32位等长的字符串。
当然MD5() 函数虽然因其安全性问题不再适用于安全领域,但在快速校验、去重、生成标识等非对抗性场景中仍有实用价值。

2.3 ifnull(val1, val2)

如果val1为null,则返回val2,否则返回val1的值

3. 实战OJ

SQL250 查找字符串中逗号出现的次数

怎么做呢?思路:

用字符串的总长度-去掉逗号后的长度(使用replace函数把字符串中的逗号替换为空串)

sql 复制代码
select 
    id,
    length(string)-length(replace(string,',','')) as cnt 
from 
    strings;
相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
小白男神1 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶1 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
kybs19911 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
程序猿_极客1 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统