1. Mysql内置函数分类及使用范围

  1. 数学函数: 这类函数只要用于处理数字。这类函数包括绝对值函数、正弦函数、余弦函数、获取随机数函数等。
  2. 字符串函数:这类函数主要用于处理字符串。其中包括字符串连接函数、字符串比较函数、将字符串的字母变成小写或大写字母的函数、获取子串的函数等。
  3. 日期和时间函数:这类函数主要用于处理日期和时间。其中包括取当前时间的函数、获取当前日期的函数、返回年份的函数、返回日期的函数等。
  4. 流程函数:这类函数主要用于在SQL语句中控制条件选择。其中包括IF语句、CASE语句、WHEN语句等。
  5. 系统信息函数:这类函数主要用于获取mysql数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数、获取数据库版本的函数等。
  6. 加密函数:这类函数主要用于对字符串进行加密解密。其中包括字符串加密函数、字符串解密函数等。
  7. 其他函数:包括格式化函数、锁函数等。

2. 常用函数列举

1. 数学函数

ABS(x)                      返回x的绝对值

CEIL(x),CEILING(x)          返回大于或等于x的最小整数(向上取整)

FLOOR(x)                    返回小于或等于x的最大整数(向下取整)

RAND()                      返回0~1的随机数

RAND(x)                     返回0~1的随机数,x值相同时返回的随机数相同

SIGN(x)                     返回x的符号,x是负数、0、正数分别返回-1、0、1

PI()                        返回圆周率

TRUNCATE(x,y)               返回数值x保留到小数点后y位的值

ROUND(x)                    返回离x最近的整数(四舍五入)

ROUND(x,y)                  保留x小数点后y位的值,但截断时要四舍五入

POW(x,y),POWER(x,y)         返回x的y次方

SQRT(x)                     返回x的平方根

EXP(x)                      返回e的x次方

MOD(x,y)                    返回x 除以y以后的余数

LOG(x)                      返回自然对数(以e为底的对数)

LOG10(x)                    返回以10为底的对数

RADIANS(x)                  讲角度转换为弧度

DEGREES(x)                  讲弧度转换为角度

SIN(x)                      求正弦值

ASIN(x)                     求反正弦值

COS(x)                      求余弦值

ACOS(x)                     求反余弦值

TAN(x)                      求正切值

ATAN(x),ATAN(x,y)           求反正切值

COT(x)                      求余切值

2.字符串函数

CHAR_LENGTH(s)              返回字符串s的字符数

LENGTH(s)                   返回字符串s的长度

CONCAT(s1,s2,.....)         将字符串s1,s2等多个字符串合并为一个字符串

CONCAT_WS(x,s1,s2,....)     同COUCAT(s1,s2,.....),但是每个字符串之间要加上x

INSERT(s1,x,len,s2)         将字符串s2替换s1的x位置开始长度为len的字符串

UPPER(s),UCASE(s)           讲字符串s的所有字符都变成大写字母

LOWER(s),LCASE(s)           讲字符串s的所有字符都变成小写字母

LEFT(s,n)                   返回字符串s的前n个字符

RIGHT(s,n)                  返回字符串s的后n个字符

LPAD(s1,len,s2)             字符串s2来填充s1的开始处,使字符串长度达到len

RPAD(s1,len,s2)             字符串s2来填充s1的结尾处,使字符串长度达到len

LTRIM(s)                    去掉字符串s开始处的空格

RTRIM(s)                    去掉字符串s结尾处的空格

TRIM(s)                     去掉字符串s开始处和结尾处的空格

TRIM(s1 FROM s)             去掉字符串s中开始处和结尾处的字符串s1

REPEAT(s,n)                 将字符串s重复n次

SPACE(n)                    返回n个空格

REPLACE(s,s1,s2)            用字符串s2代替字符串s中的字符串s1

STRCMP(s1,s2)               比较字符串s1和s2

SUBSTRING(s,n,len)          获取从字符串s中的第n个位置开始长度为len的字符串

MID(s,n,len)                同SUBSTRING(s,n,len)ATE(s1,s),POSTTION(s1  IN s)从字符串s中获取s1的开始位置

INSTR(s,s1)                 从字符串s中获取s1的开始位置

REVERSE(s)                  将字符串s的顺序反过来

ELT(n,s1,s2...)             返回第n个字符串

FIELD(s,s1,s2...)           返回第一个与字符串s匹配的字符串的位置

FIND_IN_SET(s1,s2)          返回在字符串s2中与s1匹配的字符串的位置

MAKE_SET(x,s1,s2...)        按x的二进制数从s1,s2......sn中选取字符串

3.日期和时间函数

CURDATE(),CURRENT_DATE()            返回当前日期

CURTIME(),CURRENT_TIME()            返回当前时间

NOW(),CURRENT_TIMESTAMP()LOCALTIME(),SYSDATE()LOCALTIMESTAMP()     返回当前日期和时间

UNIX_TIMESTAMP()                    以UNIX时间戳的形式返回当前时间

UNIX_TIMESTAMP(d)                   将时间d以UNIX时间戳的形式返回

FROM_UNIXTIME(d)                    把UNIX时间戳的时间转换为普通格式的时间

UTC_DATE()                          返回UTC(国际协调时间)日期

UTC_TIME()                          返回UTC时间

MONTH(d)                            返回日期d中的月份值,范围是1~12

MONTHNAME(d)                        返回日期d中的月份名称,如january

DAYNAME(d)                          返回日期d是星期几,如Monday

DAYOFWEEK(d)                        返回日期d是星期几,1表示星期日,2表示星期2

WEEKDAY(d)                          返回日期d是星期几,0表示星期一,1表示星期2

WEEK(d)                             计算日期d是本年的第几个星期,范围是0-53

WEEKOFYEAR(d)                       计算日期d是本年的第几个星期,范围是1-53

DAYOFYEAR(d)                        计算日期d是本年的第几天

DAYOFMONTH(d)                       计算日期d是本月的第几天

YEAR(d)                             返回日期d中的年份值

QUARTER(d)                          返回日期d是第几季度,范围1-4

HOUR(t)                             返回时间t中的小时值

MINUTE(t)                           返回时间t中的分钟值

SECOND(t)                           返回时间t中的秒钟值

EXTRACT(type FROM d)                从日期d中获取指定的值,type指定返回的值,如YEAR,HOUR等

TIME_TO_SEC(t)                      将时间t转换为秒

SEC_TO_TIME(s)                      将以秒为单位的时间s转换为时分秒的格式

TO_DAYS(d)                          计算日期d到0000年1月1日的天数

FROM_DAYS(n)                        计算从0000年1月1日开始n天后的日期

DATEDIFF(d1,d2)                     计算日期d1到d2之间相隔的天数

TIMESTAMPDIFF(type,d1,d2)           计算日期d1到d2之间的时间差,type可指定YEAR、MONTH、DAY、HOUR、MINUTE或SECOND。

ADDDATE(d,n)                        计算开始日期d加上n天的日期

ADDDATE(d, INTERVAL  expr type)     计算起始日期d加上一个时间段后的日期

SUBDATE(d,n)                        计算起始日期d减去n天的日期

SUBDATE(d, INTERVAL  expr type)     计算起始日期d减去一个时间段后的日期

ADDTIME(t,n)                        计算起始时间t加上n秒的时间

SUBTIME(t,n)                        计算起始时间t减去n秒的时间

DATE_FORMAT(d,f)                    按照表达式f的要求显示日期d

TIME_FORMAT(t,f)                    按照表达式f的要求显示时间t

GET_FORMAT(type,s)                  根据字符串s获取type类型数据的显示格式

4.条件判断函数

条件判断函数用来在SQL语句中进行条件判断。更加是否满足判断条件,SQL语句执行不同的分支。

IF(expr,v1,v2)函数

IF(expr,v1,v2)函数中,如果表达式expr成立,返回结果v1,否则,返回结果v2。

CASE函数

CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2...][ELSE vn] END
示例
case status when 1 then '状态为1'
when 2 then '状态为2'
when 3 then '状态为3'
else '其他' end
等同写法:
case when status=1 then '状态为1'
when status=2 then '状态为2'
when status=3 then '状态为3'
else '其他' end ifnull(val1,val2) 当val1为null时返回val2,否则返回val1
nullif(val1,val2) 当val1等于val2时返回null,否则返回val1

5.系统信息函数

VERSION()                       返回数据库的版本号

CONNECTION_ID()                 返回服务器的连接数,也就是到现在为止mysql服务的连接次数

DATABASE(),SCHEMA()             返回当前数据库名

USER()                          返回当前用户的名称

CHARSET(str)                    返回字符串str的字符集

COLLATION(str)                  返回字符串str的字符排列方式

LAST_INSERT_ID()                返回最后生成的auto_increment值

6.加密解密函数

PASSWORD(str)                   对字符串str进行加密

MD5(str)                        对字符串str进行加密

ENCODE(str,pswd_str)            使用字符串pswd_str来加密字符串str,加密结果是一个二进制数,必须使用BLOB类型来保持它

DECODE(crypt_str,pswd_str)      解密函数,使用字符串pswd_str来为crypt_str解密

7.其他函数

FORMAT(x,n)                     格式化函数,可以讲数字x进行格式化,将x保留到小数点后n位,这个过程需要进行四舍五入。

ASCII(s)                        返回字符串s的第一个字符的ASSCII码

BIN(x)                          返回x的二进制编码

HEX(x)                          返回x的十六进制编码

OCT(x)                          返回x的八进制编码

CONV(x,f1,f2)                   将x从f1进制数变成f2进制数

INET_ATON(IP)                   将IP地址转换为数字表示,IP值需要加上引号

INET_NTOA(n)                    可以将数字n转换成IP的形式

GET_LOCT(name,time)             加锁函数,定义一个名称为name、持续时间长度为time秒的锁,如果锁定成功,返回1,如果尝试超时,返回0,如果遇到错误,返回NULL.

RELEASE_LOCK(name)              解除名称为name的锁,如果解锁成功,返回1,如果尝试超时,返回0,如果解锁失败,返回NULL。

IS_FREE_LOCK(name)              判断是否使用名为name的锁,如果使用,返回0,否则返回1.

CONVERT(s USING cs)             将字符串s的字符集变成cs

CAST(x AS type),CONVERT(x,type) 这两个函数将x变成type类型,这两个函数只对BINARY,CHAR,DATE,DATETIME,TIME,SIGNED  INTEGER,UNSIGNED INTEGER这些类型起作用,但这两种方法只是改变了输出值得数据类型,并没有改变表中字段的类型。

3. mysql5.7新增json相关函数

JSON_ARRAY(d1,d2...)                       创建JSON数组
JSON_ARRAY_APPEND(json_arr, path, value) 往json数组内之后追加元素
JSON_ARRAY_INSERT(json_arr, path, value) 往json数组内之前添加元素
JSON_CONTAINS() JSON是否在路径中包含特定对象
JSON_CONTAINS_PATH() JSON是否在路径处包含任何数据
JSON_DEPTH() JSON的最大深度
JSON_EXTRACT() 从JSON获取数据
JSON_INSERT() 如果数据不存在就将数据插入JSON
JSON_KEYS() JSON文档中的键数组(类似map.keys())
JSON_LENGTH() JSON文档中的元素数量
JSON_MERGE_PATCH() 合并JSON,替换重复键的值(后面替换前面)
JSON_MERGE_PRESERVE() 合并JSON,保留重复的键
JSON_OBJECT() 创建JSON
JSON_PRETTY() 格式化打印JSON
JSON_QUOTE() 引用JSON(将字符转换成带"",能转换转译字符)
JSON_REMOVE() 从JSON文档中删除数据
JSON_REPLACE() 替换JSON文档中的值
JSON_SEARCH() 查询JSON文档中值的路径
JSON_SET() 将数据插入JSON文档(存在即替换值)
JSON_STORAGE_SIZE() JSON二进制所占字节数
JSON_TYPE() JSON值的类型
JSON_UNQUOTE() 引用JSON(去除字符的"",能转换转译字符)
JSON_VALID() JSON值是否有效

1.创建一个json

select JSON_OBJECT('name','张三','no','001')
#结果:{"no": "001", "name": "张三"}

2.创建一个json数组

select JSON_ARRAY(JSON_OBJECT('name','张三','no','001')
,JSON_OBJECT('name','李四','no','002'))
#结果:[{"no": "001", "name": "张三"}, {"no": "002", "name": "李四"}]

3.获取json中的某个值

select JSON_UNQUOTE(JSON_EXTRACT(JSON_ARRAY(JSON_OBJECT('name','张三','no','001')
,JSON_OBJECT('name','李四','no','002')), '$[0].name'))
#结果:张三

4.往json数组追加元素

select JSON_ARRAY_APPEND(JSON_ARRAY(JSON_OBJECT('name','张三','no','001')
,JSON_OBJECT('name','李四','no','002')),'$',JSON_OBJECT('name','王五','no','003'))
#结果:[{"no": "001", "name": "张三"}, {"no": "002", "name": "李四"}
, {"no": "003", "name": "王五"}]
#注意,此函数是往元素内增加 select JSON_ARRAY_INSERT(JSON_ARRAY(JSON_OBJECT('name','张三','no','001')
,JSON_OBJECT('name','李四','no','002')),'$[1]',JSON_OBJECT('name','王五','no','003'))
#结果:[{"no": "001", "name": "张三"}, {"no": "003", "name": "王五"},
{"no": "002", "name": "李四"}]

5.修改json中的某个值

select JSON_REPLACE(JSON_ARRAY(JSON_OBJECT('name','张三','no','001')
,JSON_OBJECT('name','李四','no','002')),'$[1].name','修改后')
#结果:[{"no": "001", "name": "张三"}, {"no": "002", "name": "修改后"}]

6.获取条件下的指定下标数据

注释:此方法只能查寻第一条匹配数据

此条件为字符串时:

select  order_status_info,
JSON_EXTRACT(order_status_info, '$[*].statusDesc'),
JSON_UNQUOTE(JSON_SEARCH(JSON_EXTRACT(order_status_info, '$[*].statusDesc'),'one','进件完成')) as t,
JSON_EXTRACT(order_status_info,
JSON_UNQUOTE(JSON_SEARCH(JSON_EXTRACT(order_status_info, '$[*].statusDesc'),'one','进件完成')))
from loan_activate_order_extend where id=5678456467878979001

此条件不为字符串时

select  order_status_info,
JSON_EXTRACT(order_status_info, '$[*].status'),
REPLACE(REPLACE(REPLACE(JSON_EXTRACT(order_status_info, '$[*].status'),',','","'),'[','["'),']','"]'),
JSON_UNQUOTE(JSON_SEARCH(REPLACE(REPLACE(REPLACE(JSON_EXTRACT(order_status_info, '$[*].status'),',','","'),'[','["'),']','"]'),'one','41')) as t,
JSON_EXTRACT(order_status_info,
JSON_UNQUOTE(JSON_SEARCH(REPLACE(REPLACE(REPLACE(JSON_EXTRACT(order_status_info, '$[*].status'),',','","'),'[','["'),']','"]'),'one','41')))
from loan_activate_order_extend where id=5678456467878979001

4. 参考文档

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html

5. 后言

在使用mysql函数时应当注意查询效率,sql是否合理,当需求的sql过于复杂的时候应当思考是否可以在表内做字段沉余、建中间表等解决方式。

数据格式是否与预期一致,如在使用with recursive注意连表条件是否会造成死循环。

mysql常用函数详解的更多相关文章

  1. php缓存技术——memcache常用函数详解

    php缓存技术——memcache常用函数详解 2016-04-07 aileen PHP编程 Memcache函数库是在PECL(PHP Extension Community Library)中, ...

  2. # OpenGL常用函数详解(持续更新)

    OpenGL常用函数详解(持续更新) 初始化 void glutInit(int* argc,char** argv)初始化GULT库,对应main函数的两个参数 void gultInitWindo ...

  3. STL之map与pair与unordered_map常用函数详解

    STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称 ...

  4. Mysql 字符函数详解

    MySql 所有字符串函数函数详解 ASCII(str) 返回str最左边第一位字符的ASCII编码,如果str为空,则返回 0 .如果str为NULL,则返回NULL -- 只返回a的ASCII编码 ...

  5. Mysql 字符串函数 详解

    字符串函数是最常用的一种函数了,如果大家编写过程序的话,不妨回过头去看看自己使用过的函数,可能会惊讶地发现字符串处理的相关函数占已使用过的函数很大一部分.MySQL中字符串函数也是最丰富的一类函数,表 ...

  6. Mysql常用命令详解

    Mysql安装目录 数据库目录 /var/lib/mysql/ 配置文件 /usr/share/mysql(mysql.server命令及配置文件) 相关命令 /usr/bin(mysqladmin ...

  7. oracle常用函数详解(详细)

    转自:https://www.cnblogs.com/lxl57610/p/7442130.html Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函 ...

  8. mysql find_in_set函数详解

    Mysql函数FIND_IN_SET()的使用方法 有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储 ...

  9. Discuz 插件制作之后台常用函数详解

    目录 showsetting()表单显示 cpmsg()提示消息 showformheader()创建表单头 showformfooter()创建表单尾 showtableheader()创建表格头 ...

  10. numpy.random 常用函数详解之排列乱序篇(Permutations)

    1.numpy.random.shuffle(x) 参数:填入数组或列表. 返回值:无. 函数功能描述:对填入的数组或列表进行乱序处理,shape保持不变. 2.numpy.random.permut ...

随机推荐

  1. Smali语言

    什么是Smali smali语言是Davlik的寄存器语言,语法上和汇编语言相似,DalvikVM与JVM的最大的区别之一就是DalvikVM是基于寄存器的.基于寄存器的意思是,在smali里的所有操 ...

  2. 最全面的JAVA多线程知识总结

    ​ 背景: 2023年经营惨淡,经历了裁员就业跳槽再就业,在找工作过程中对于知识的梳理和总结,本文总结JAVA多线程. 应用场景: 需要同时执行多个任务或处理大量并发请求时, 目前常用的场景有: We ...

  3. Python数据可视化-折线图

    Python数据可视化-折线图 一.JSON数据格式 1.1 什么是json JSON是一种轻量级的数据交互格式.可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 ...

  4. .Net Core控制台程序读取Json配置文件

    1 添加依赖(可以直接通过nuget包安装 Microsoft.Extensions.Configuration.Json 这个会依赖其他两个会自动安装依赖的) Microsoft.Extension ...

  5. Python 潮流周刊第 13 期(2023-07-29)

    查看全文: https://pythoncat.top/posts/2023-07-29-weekly 文章&教程 1.Jupyter Notebook 7 隆重发布 (英) 2.Python ...

  6. P1941 [NOIP2014 提高组] 飞扬的小鸟 题解

    我们先不管障碍物. 设 \(f[i][j]\) 表示来到点 \((i,j)\) 的最少点击屏幕数. 因为每秒要不上升 \(k\times x[i]\),要么下降 \(y[i]\). 所以有: \[f[ ...

  7. JavaScript中单例模式这样用

    如果希望自己的代码更优雅.可维护性更高以及更简洁,往往离不开设计模式这一解决方案. 在JS设计模式中,最核心的思想:封装变化(将变与不变分离,确保变化的部分灵活,不变的部分稳定). 单例模式 那么来说 ...

  8. MongoDB索引操作和执行计划Explain()详解

    一.索引操作 说明,下面的内容举例时,以"dailyTrip"collection为例. 字段内容如下: { "_id" : ObjectId("63 ...

  9. 结果过滤器—MVC项目中结果过滤器(Result Filter)使用

    一.什么是结果过滤器? 结果过滤器(ResultFilter),是对执行的Action结果进行处理的一种AOP思想,适用于任何需要直接环绕 View 或格式化处理的逻辑.结果过滤器可以替换或更改 Ac ...

  10. Unity TextMeshPro 添加中文字体遇见的问题以及解决方案

    前言 按标准官方教程为 Unity TextMeshPro 添加中文字体时出现了各种奇奇怪怪的问题,于是有了这篇随笔. 中文字体解决方案 以下步骤适用于 TextMeshPro 3.0.6. 字符数量 ...