目录

  • 1. MySQL函数简介
    • 1.1 按数据类型分类
    • 1.2 按输入数量分类
  • 2. 数值函数
    • 2.1 基本函数
    • 2.2 角度与弧度互换函数
    • 2.3 三角函数
    • 2.4 指数与对数
    • 2.5 进制间的转换
  • 3. 字符串函数
  • 4. 日期类型函数
  • 5. 流程控制函数
  • 6. 加密解密函数
  • 7. MySQL信息函数
  • 8. 其他函数

1. MySQL函数简介

在MySQL中,最重要的函数就是数值函数、字符串函数、日期时间函数和流程控制函数。

不同的DBMS之间的函数绝大部分都是不通用的。如,MySQL和Oracle之间很多函数是不通用的。本章只学习MySQL中的函数。

1.1 按数据类型分类

分为:数值函数、字符串函数、日期时间函数、流程控制函数、加密与解密函数、获取MySQL信息函数、聚合函数等。

1.2 按输入数量分类

单进单出称为单行函数,多进单出称为多行函数 (或聚合函数) 。如下图所示:

本章先学习单行函数,其特征为:

  • 只对一行进行变换
  • 每行返回一个结果
  • 可以嵌套
  • 参数可以是一列或一个值

2. 数值函数

2.1 基本函数

函数 作用
ABS(x) 返回x的绝对值
SIGN(x) 返回x的符号,正数为1,负数为-1, 0返回0
PI() 返回圆周率的值
CEIL(x), CEILING(x) 返回大于或等于某个值的最小整数
FLOOR(x) 返回小于或等于某个值的最大整数
LEAST(e1, e2, …, en) 返回列表中的最小值
GREATEST(e1, e2, …, en) 返回列表中的最大值
MOD(x, y) 返回x除以y后的余数
RAND() 返回0~1的随机值
RAND(x) 返回0~1的随机值,x作为随机种子,相同的x值会产生相同的随机数
ROUND(x) 返回一个对x四舍五入后,最接近于x的整数
ROUND(x, y) 返回一个对x四舍五入后,最接近于x的值,并保留小数点到后面y位
TRUNCATE(x, y) 返回数字x截断为y位小数的结果
SQRT(x) 返回x的平方根,当x为负数时返回NULL

2.2 角度与弧度互换函数

函数 作用
RADIANS(x) 将角度转换为弧度,其中x为角度值
DEGREES(x) 将弧度转换为角度,其中x为弧度值

2.3 三角函数

函数 作用
SIN(x) 返回x的正弦值,其中x为弧度值
ASIN(x) 返回x的反正弦值,即获取正弦值为x的值。若x的值不在-1到1之间,则返回NULL
COS(x) 返回x的余弦值,其中x为弧度值
ACOS(x) 返回x的反余弦值,即获取余弦值为x的值。若x的值不在-1到1之间,则返回NULL
TAN(x) 返回x的正切值,其中x为弧度值
ATAN(x) 返回x的反正切值,即获取正切值为x的值
ATAN(x, y) 返回两个参数的反正切值
COT(x) 返回x的余切值,其中x为弧度值

2.4 指数与对数

函数 作用
POW(x, y), POWER(x, y) 返回x的y次方
EXP(x) 返回 eee 的x次方
LN(x), LOG(x) 返回以 eee 为底x的对数,当x<=0时, 返回NULL
LOG10(x) 返回以10为底的x的对数,当x<=0时, 返回NULL
LOG2(x) 返回以2为底x的对数,当x<=0时, 返回NULL

2.5 进制间的转换

函数 作用
BIN(x) 返回x的二进制编码
HEX(x) 返回x的十六进制编码
OCT(x) 返回x的八进制编码
CONV(x, f1, f2) 返回f1进制数变成f2进制数

3. 字符串函数

【注意】MySQL中,字符串位置是从1开始的。

函数 作用
ASCII(s) 返回字符串s中的第一个字符的ASCII码值
CHAR_LENGTH(s) 返回字符串s的字符数,作用与CHARACTER_LENGTH(s)相同
LENGTH(s) 返回字符串s的字节数,和字符集有关
CONCAT(s1, s2, …, sn) 连接s1, s2, …, sn为一个字符串
CONCAT_WS(x, s1, s2, …, sn) 同CONCAT(s1, s2, …, sn)函数,但是每个字符串之间加上x
INSERT(str, idx, len, replacestr) 将字符串str从第idx位置开始,len个字符串长的子串替换成字符串replacestr
REPLACE(str, a, b) 用字符串b替换字符串str中所有字符串a
UPPER(s)或UCASE(s) 将字符串s的所有字母转换成大写字母
LOWER(s)或LCASE(s) 将字符串s的所有字母转换成小写字母
LEFT(str, n) 返回字符串str最左边的n个字符
RIGHT(str, n) 返回字符串str最右边的n个字符
LPAD(str, len, pad) 用字符串pad对str最左边进行填充,直到str的长度为len个字符
RPAD(str, len, pad) 用字符串pad对str最右边进行填充,直到str的长度为len个字符
LTRIM(s) 去掉字符串s左侧的空格
RTRIM(s) 去掉字符串s右侧的空格
TRIM(s) 去掉字符串s开头和结尾的空格
TRIM(s1 FROM S) 去掉字符串s开头与结尾的s1
TRIM(LEADING s1 FROM s) 去掉字符串s左侧的s1
TRIM(TRAILING s1 FROM s) 去掉字符串s右侧的s1
REPEAT(str, n) 返回str重复n次的结果
SPACE(n) 返回n个空格
STRCMP(s1, s2) 比较字符串s1和s2的ASCII码值的大小
SUBSTR(s, index, len) 返回从字符串s的index位置开始的len个字符。作用与SUBSTRING(s, index, len)、MID(s, index, len)相同
LOCATE(substr, str) 返回字符串substr在字符串str中首次出现的位置,若没找到,则返回0
ELT(m, s1, s2, …, sn) 返回指定位置的字符串,若m=1,则返回s1;若m=2,则返回s2……以此类推
FIELD(s, s1, s2, …, sn) 返回字符串s在字符串列表中第一次出现的位置
FIND_IN_SET(s1, s2) 返回字符串s1在字符串s2中出现的位置。其中,s2是一个以逗号分隔的字符串
REVERSE(s) 返回s反转后的字符串
NULLIF(value1, value2) 比较两个字符串,若value1与value2相等,则返回NULL,否则返回value1

4. 日期类型函数

《超详细的MySQL日期类型函数总结》

5. 流程控制函数

MySQL中的流程处理函数主要包括 IF()、IFNULL() 和 CASE()函数。

函数 作用
IF(value, value1, value2) 如果value的值为TRUE,则返回value1,否则返回value2
IFNULL(value1, value2) 如果value1不为NULL,返回value1,否则返回value2
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 … [ELSE result] END 相当于Java的if…else
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值2 THEN 值2 … [ELSE 值n] END 相当于Java的switch…case…

举个例子:

IF()

SELECT last_name, salary, IF(salary >= 6000, '高工资', '低工资')
FROM employees;

查询结果:

IFNULL()

SELECT last_name, commission_pct, IFNULL(commission_pct, 0)
FROM employees;

查询结果:

CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 … [ELSE result] END

SELECT last_name, salary, CASE WHEN salary >= 15000 THEN '人生赢家' WHEN salary >= 10000 THEN '高富帅'WHEN salary >= 8000  THEN '潜力股'ELSE '人民群众'END AS "describe"
FROM employees;

查询结果:

其中,ELSE 可以省略。

【例子1】

查询部门号为 10,20, 30 的员工信息,
若部门号为 10, 则打印其工资的 1.1 倍,
20 号部门, 则打印其工资的 1.2 倍,
30 号部门,打印其工资的 1.3 倍数,
其他部门,打印其工资的 1.4 倍数。

# 写法一
SELECT last_name, salary, department_id,
CASE WHEN department_id = 10 THEN salary * 1.1WHEN department_id = 20 THEN salary * 1.2WHEN department_id = 30 THEN salary * 1.3ELSE salary * 1.4 END AS "describe"
FROM employees;# 写法二
SELECT last_name, salary, department_id,
CASE department_id WHEN 10 THEN salary * 1.1WHEN 20 THEN salary * 1.2WHEN 30 THEN salary * 1.3ELSE salary * 1.4 END AS "describe"
FROM employees;

查询结果:

【例子2】

查询部门号为 10,20, 30 的员工信息,
若部门号为 10, 则打印其工资的 1.1 倍,
20 号部门, 则打印其工资的 1.2 倍,
30 号部门打印其工资的 1.3 倍数。

# 写法一
SELECT last_name, salary, department_id,
CASE WHEN department_id = 10 THEN salary * 1.1WHEN department_id = 20 THEN salary * 1.2WHEN department_id = 30 THEN salary * 1.3END AS "describe"
FROM employees
WHERE department_id IN(10, 20, 30);# 写法二
SELECT last_name, salary, department_id,
CASE department_id WHEN 10 THEN salary * 1.1WHEN 20 THEN salary * 1.2WHEN 30 THEN salary * 1.3END AS "describe"
FROM employees
WHERE department_id IN(10, 20, 30);

查询结果:

6. 加密解密函数

加密与解密函数主要用于对数据库中的数据 (如用户的登录密码、银行的取款密码等) 进行加密和解密处理,防止数据被黑客窃取。这些函数在保证数据库安全时非常有用。

但在实际开发中,用户密码的加密已经前移到客户端就已经完成了。即用户在客户端输入完密码,点击登录之后就已经完成加密操作了。这样,在网络传输过程中传输的是已经加密的密码信息,黑客就算在网络传输过程截取密码信息,获得的也只是加密的暗文,更加安全。因此在数据库端进行加密解密已经不那么重要了,仅仅是提供一种加密方式的选择罢了。

函数 作用
PASSWORD(str) 返回字符串str的加密版本,41位长的字符串。加密结果不可逆,常用于用户的密码加密。在MySQL8.0中被Deprecated
MD5(str) 返回字符串str的md5加密后的值。加密结果不可逆,若参数位NULL,则会返回NULL
SHA(str) 从原名文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。加密结果不可逆,SHA加密算法比MD5更加安全
ENCODE(value, password_seed) 返回使用password_seed作为加密密码加密value。在MySQL8.0中被Deprecated
DECODE(value, password_seed) 返回使用password_seed作为加密密码解密value。在MySQL8.0中被Deprecated

ENCODE(value,password_seed) 函数与 DECODE(value,password_seed) 函数互为反函数。

举个栗子:

SELECT MD5('mysql'), SHA('mysql')
FROM DUAL;

查询结果:

7. MySQL信息函数

MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作。

函数 作用
VERSION() 返回当前MySQL的版本号
CONNECTION_ID() 返回当前MySQL服务器的连接数
DATABASE(), SCHEMA() 返回MySQL命令行当前所在的数据库
USER(), CURRENT_USER(), SYSTEM_USER(), SESSION_USER() 返回当前连接MySQL的用户名,返回结果格式为“主机名@用户名”
CHARSET(value) 返回字符串value自变量的字符集
COLLATION(value) 返回字符串value的比较规则

举个栗子:

SELECT VERSION(), CONNECTION_ID(), DATABASE(), SCHEMA(),
USER(), CURRENT_USER(), SYSTEM_USER(), SESSION_USER(),
CHARSET('卷'), COLLATION('爱你')
FROM DUAL;

查询结果:

8. 其他函数

MySQL中有些函数无法对其进行具体的分类,但是这些函数在MySQL的开发和运维过程中也是不容忽视的。

函数 作用
FORMAT(value, n) 返回对数字value进行格式化啊后的结果数据。n表示四舍五入后保留到小数点后n位
CONV(value, from, to) 将value的值进行不同进制之间的转换
INET_ATON(ipvalue) 将以点分隔的IP地址转化为一个数字
INET_NTOA(value) 将数字形式的IP地址转换为以点分隔的IP地址
BENCHMARK(n, expr) 将表达式expr重复执行n次。用于测试MySQL处理expr表达式所耗费的时间
CONVERT(value USING char_code) 将value所使用的字符编码修改为char_code

举个例子:

FORMAT(value, n)

SELECT FORMAT(123.125, 2), FORMAT(123.125, 0), FORMAT(123.125, -2)
FROM DUAL;

查询结果:

可以看到,如果n的值小于0,只保留整数部分,不会保留到十位、百位这些。

CONV(value, from, to)

SELECT CONV(16, 10, 2), CONV(8888, 10, 16), CONV(NULL, 10, 2)
FROM DUAL;

查询结果:

  • 第一个字段意思是把数字16从十进制转换为二进制,后面两个字段同理。
  • 当要转化的数字为NULL时,运算结果也为NULL。

INET_ATON(ipvalue)INET_NTOA(value)

SELECT INET_ATON('192.168.1.200'), INET_NTOA(3232235976)
FROM DUAL;

查询结果:

BENCHMARK(n, expr)

SELECT BENCHMARK(9000000, SHA('OceanUniversityOfChina'))
FROM DUAL;

查询结果:

CONVERT(value USING char_code)

SELECT CHARSET('OUC'), CHARSET(CONVERT('OUC' USING 'utf8mb4'))
FROM DUAL;

查询结果:

【MySQL】16-超详细的MySQL单行函数汇总相关推荐

  1. 了解MySQL(超详细的MySQL工作原理 体系结构)

    了解MySQL(超详细的MySQL工作原理 体系结构) 1.MySQL体系结构 2.MySQL内存结构 3.MySQL文件结构 4.innodb体系结构 一.了解MySQL前你需要知道的 引擎是什么: ...

  2. 超详细的MySQL工作原理 体系结构

    超详细的MySQL工作原理 体系结构 妖精的杂七杂八 2020-08-13 13:54:12 了解MySQL(超详细的MySQL工作原理 体系结构) 1.MySQL体系结构 2.MySQL内存结构 3 ...

  3. 一份超详细的MySQL高性能优化实战总结!

    一份超详细的MySQL高性能优化实战总结! MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰. 在进行 MySQL 的优化之前 ...

  4. 超详细的MySQL入门教程(四)

    MySQL:简单的增删改查 查询数据 基本语法介绍 打印任意值 查询表中全部数据 查询表中部分字段 限定条件查询 例1:查询编号值小于指定值的记录 例2:查询地址不等于某值的记录 例3:查询一级地址等 ...

  5. apache mysql 连接数 winnt,APACHE PHP MYSQL PHPMYADMIN超详细配置教程

    Apache+PHP+MySQL+phpMyAdmin超详细配置教程 安装之前需要下载 Apache2.0.59 PHP4.4.4Win32 MySQL4.12 phpMyAdmin2.9.1.1rc ...

  6. 【超详细】MySQL零基础入门实战

    文章目录 1.MySQL入门 1.1.源码安装MySQL5.7 1.2.Docker安装MySQL5.7 1.3.忘记MySQL超户密码 1.4.MySQL支持简体中文 2.MySQL数据库操作 2. ...

  7. 超详细的MySQL三万字总结

    文章目录 MySQL基础 数据库的介绍 数据库概述 数据的存储方式 数据库的概念 常见数据库排行榜 数据库的安装与卸载 数据库的安装 数据库的卸载 数据库服务的启动与登录 Windows 服务方式启动 ...

  8. Mysql基础篇(2)—— 单行函数和聚合函数

    单行函数 特点 可以嵌套 参数可以是一列或一个值 每行返回一个结果 数值函数 函数名 含义 ABS(x) 返回x的绝对值 SIGN(X) 返回X的符号.正数返回1,负数返回-1,0 PI() 返回圆周 ...

  9. 【MySQL】17-超详细的MySQL聚合函数总结

    目录 1. 聚合函数介绍 1.1 AVG和SUM函数 1.2 MIN和MAX函数 1.3 COUNT函数 2. GROUP BY 2.1 基本使用 2.2 使用多个列分组 2.3 GROUP BY中使 ...

最新文章

  1. ntu课程笔记7454 期中复习
  2. 【Python】利用 Python 实现多任务进程
  3. 有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
  4. 使用Travis-CI的SpringBoot应用程序的CI / CD
  5. 电脑提示0xc0000719设备未迁移如何解决
  6. ARMA模型的性质之MA模型
  7. 一步一步搭建mysql_Linux——搭建PHP开发环境第一步:mysql
  8. Page Cache引起的业务问题处理
  9. poj 1511 Invitation Cards spfa 基础题!!虽然我做的比较坎坷!!可以练手啊!!
  10. 服装店商家不离手的十大服装进销存管理软件,功能大对比
  11. u盘如何在计算机应用内存,u盘扩大内存,小编教你如何用U盘扩展内存
  12. 2021年CCPC网络预选赛重赛补题
  13. linux怎么查看证书库,curl --resolve 查看证书情况
  14. 安卓接入微信php处理,PHP对接微信公众号实现简单自动回复
  15. 用c语言编写的打字母游戏,用C语言编写小游戏——“井字棋”
  16. ISO27001认证是信息安全管理体系认证
  17. Service 定义(startService、bindService、IntentService)
  18. MFC单项选择题标准化考试系统
  19. CAN总线数据分析 汽车CAN总线
  20. STM32读写24C02遇到的问题

热门文章

  1. echarts最新版做中国地图(详细版+避雷版)
  2. java漏斗代码_集算示例:10 行代码解决漏斗转换计算
  3. 网络测试仪哪个牌子好
  4. html 设置地图中心点,SOSO地图JS画出标注和中心点以html形式运行
  5. quartus频率计 时钟设置_频率计的使用说明
  6. html 让按钮立体,纯CSS3打造立体质感按钮
  7. linux 命令行下载mysql
  8. ROS1云课→20迷宫不惑之A*大法(一种虽古老但实用全局路径规划算法)
  9. HTML实现圣诞树(HTML+CSS+JavaScript)
  10. numpy下 随机抽样