目录
1.返回串联字符串 GROUP_CONCAT()
2.返回子字符串第一次出现的索引 INSTR()
3.如果子集中的所有 GTID 也在集合中,返回 true,否则返回false GTID_SUBSET()
4.返回集合中不在子集中的所有 GTID GTID_SUBTRACT()
5.十进制或字符串值的十六进制表示形式 HEX()
6.提取小时 HOUR()
7.重症监护室库版本 ICU_SUBTRACT()
8.如果/否则构造 IF()
9.空 if/else 构造 IFNULL()
10.值是否在一组值内 IN()
11.返回 IP 地址的数值 INET_ATON()
12.从数值返回 IP 地址 INET_NTOA()
13.返回 IPv6 地址的数值 INET6_ATON()
14.从数值返回 IPv6 地址 INET6_NTOA()
15.在指定位置插入子字符串,最多插入指定数量的字符 INSERT()
16.返回小于第一个参数的索引论点 INTERVAL()
17.针对布尔值测试值 IS()
18.命名锁是否可用 IS_FREE_LOCK()
19.参数是否为 IPv4 地址 IS_IPV4()
20.参数是否为与 IPv4 兼容的地址 IS_IPV4_COMPAT()
21.参数是否为 IPv4 映射地址 IS_IPV4_MAPPED()
22.参数是否为 IPv6 地址 IS_IPV6()
23.针对布尔值测试值 IS NOT()
24.非空值测试 IS NOT NULL()
25.空值测试 IS NULL()
26.命名锁是否正在使用中;如果返回连接标识符,则返回真 IS_USED_LOCK()
27.参数是否为有效的 UUID IS_UUID()
28.测试参数是否为 NULL ISNULL()
29.创建 JSON 数组 JSON_ARRAY()
30.将数据追加到 JSON 文档 JSON_ARRAY_APPEND()
31.插入到 JSON 数组中 JSON_ARRAY_INSERT()
32.将结果集作为单个 JSON 数组返回 JSON_ARRAYAGG()
33.JSON 文档是否在路径中包含特定对象 JSON_CONTAINS()
34.JSON 文档是否在路径中包含任何数据 JSON_CONTAINS_PATH()
35.JSON 文档的最大深度 JSON_DEPTH()
36.从 JSON 文档返回数据 JSON_EXTRTACT()
37.将数据插入 JSON 文档 JSON_INSERT()
38.来自 JSON 文档的键数组 JSON_KEYS()
39.JSON 文档中的元素数 JSON_LENGTH()
40.合并 JSON 文档,替换重复键的值 JSON_MERGE_PATCH()
41.合并 JSON 文档,保留重复的键 JSON_MERGE_PRESERVE()
42.创建 JSON 对象 JSON_OBJECT()
43.将结果集作为单个JSON 对象返回 JSON_OBJECTAGG()
44.比较两个JSON文档是否拥有任何一个相同键值对或数组元素 JSON_OVERLAPS()
45.以可读的格式打印 JSON 文档 JSON_PRETTY()
46.引用 JSON 文档 JSON_QUOTE()
47.从 JSON 文档中删除数据 JSON_REMOVE()
48.替换 JSON 文档中的值 JSON_REPLACE()
49.根据指定的 JSON 模式验证一个 JSON 文档 JSON_SCHEMA_VALID()
50.根据指定的 JSON 模式验证一个 JSON 文档,并返回一个验证报告 JSON_SCHEMA_VALIDATION_REPORT()
脚本
create table emp
(
emp_id int primary key auto_increment comment '编号',
emp_name char(20) not null default '' comment '姓名',
salary decimal(10, 2) not null default 0 comment '工资',
department char(20) not null default '' comment '部门'
);
insert into emp(emp_name, salary, department)
values ('张晶晶', 5000, '财务部'),
('王飞飞', 5800, '财务部'),
('刘小贝', 5700, '人事部'),
('王大鹏', 6700, '人事部'),
('刘云云', 7500, '销售部'),
('刘云鹏', 7200, '销售部');
select department,group_concat(emp_name) from emp group by department;
分析
列转行
结果
脚本
SELECT INSTR('foobarbar', 'bar'), INSTR('xbar', 'foobar');
分析
INSTR(str ,substr)
返回字符串 str 中子字符串 substr 第一次出现的位置
结果
脚本
SELECT GTID_SUBSET('3E11FA47-71CA-11E1-9E33-C80AA9429562:23', '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57');
分析
GTID_SUBSET(set1,set2)
给定两组全局事务标识符set1和set2,如果set1中的所有gtid也在set2中,则返回true。否则返回false。
结果
脚本
SELECT GTID_SUBTRACT( '3E11FA47-71CA-11E1-9E33-C80AA9429562:21-57','3E11FA47-71CA-11E1-9E33-C80AA9429562:28' );
分析
给定两组全局事务标识符set1和set2,只返回set1中不属于set2的gtid。
结果
脚本
SELECT HEX('abc'),HEX(123);
结果
脚本
select hour('2022-12-12 15:20:30')
结果
脚本
SELECT ICU_VERSION();
分析
ICU_VERSION()
函数返回用于支持正则表达式操作的 Unicode 国际组件 (ICU) 库的版本。
结果
脚本
SELECT IF(1<2,'yes','no');
分析
IF(expr1,expr2,expr3)
- 如果expr2和expr3生成一个字符串,则 结果是一个字符串。
- 如果expr2和expr3都是字符串,则 如果任一字符串是 区分大小写。
- 如果expr2和expr3产生浮点数 值,则结果为浮点值。
- 如果expr2和expr3生成一个整数,则 结果是一个整数。
结果
脚本
SELECT IFNULL(1, 0),
IFNULL(NULL, 10),
IFNULL(1 / 0, 10),
IFNULL(1 / 0, 'yes');
分析
IFNULL(expr1,expr2)
如果expr1不符合要求字则返回expr2
结果
脚本
SELECT 2 IN (0, 3, 5, 7), (3, 4) IN ((1, 2), (3, 4));
分析
expr in (value1,...)
看expr是否能在后面找到对应的value值
结果
脚本
SELECT INET_ATON('192.168.153.188');
分析
给定 IPv4 网络的点分四边形表示形式 地址为字符串,返回一个整数,该整数表示 网络字节顺序中地址的数值(大 字节序)
结果
脚本
SELECT INET_NTOA(3232274876);
分析
给定一个按网络字节顺序排列的数字 IPv4 网络地址, 返回地址的点分四边形字符串表示形式 作为连接字符集中的字符串
结果
脚本
SELECT HEX(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
分析
给定字符串形式的 IPv6 或 IPv4 网络地址,返回 表示地址数值的二进制字符串 按网络字节顺序(大端序)
结果
脚本
SELECT INET6_NTOA(INET6_ATON('fdfe::5a55:caff:fefa:9089'));
分析
给定以数字表示的 IPv6 或 IPv4 网络地址 形式为二进制字符串,返回 连接字符集中字符串形式的地址
结果
脚本
SELECT INSERT('Quadratic', 3, 4, 'What');
分析
INSERT(str,pos,len,newstr)
把pos位置往后的字符替换为newstr,替换长度为len
结果
脚本
SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
分析
INTERVAL(N,N1,N2,N3,..........)
其中,N是要判断的数值,N1,N2,N3,...是分段的间隔。
这个函数的返回值是段的位置:
如果N
如果N1<=N
如果N2<=N
所以,区间是前闭后开的。
结果
脚本
SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
结果
脚本
SELECT IS_FREE_LOCK('lock1');
分析
检查锁str是否可用,返回结果为0,说明指定名称的锁正在被使用。返回1则说明这个锁尚未被使用。
结果
脚本
SELECT IS_IPV4('192.168.152.188'), IS_IPV4('192.168.152.256');
分析
如果参数是指定的有效 IPv4 地址,则返回 1 一个字符串,否则为 0
结果
脚本
SELECT IS_IPV4_COMPAT(INET6_ATON('::10.0.5.9')),IS_IPV4_COMPAT(INET6_ATON('::ffff:10.0.5.9'));
分析
IS_IPV4_COMPAT () 函数检查一个数字形式的 IPv6 地址是否是一个 IPv4 兼容的 IPv6 地址,如果是返回 1 ,否则返回 0 。 如果参数为 NULL ,该函数将返回 NULL
结果
脚本
SELECT IS_IPV4_MAPPED(INET6_ATON('::10.0.5.9')),IS_IPV4_MAPPED(INET6_ATON('::ffff:10.0.5.9'));
分析
MySQL中的此函数采用以数字形式表示为二进制字符串的IPv6地址,由INET6_ATON函数返回。如果参数是有效的IPv4映射的IPv6地址,则返回1,否则返回0。 IPv4映射地址的一般格式是:: ffff:ipv4_address。
结果
脚本
SELECT IS_IPV6('10.0.5.9'), IS_IPV6('::1');
分析
如果参数是指定的有效 IPv6 地址,则返回 1 一个字符串,否则为 0
结果
脚本
SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
结果
脚本
SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
结果
脚本
SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
结果
脚本
SELECT IS_USED_LOCK('lock1');
分析
IS_USED_LOCK(str) 检查锁str是否正在被使用,返回结果为持有锁的连接的连接ID,表示给定名称的锁正在被该连接使用,若锁没有被使用返回null。
结果
脚本
SELECT IS_UUID('6ccd780c-baba-1026-9564-5b8c656024db');
分析
如果参数是有效的字符串格式 UUID,则返回 1;如果 参数不是有效的 UUID
“有效”表示值的格式为 可以解析。也就是说,它具有正确的长度并包含 仅允许的字符(任何十六进制数字 字母大小写,以及可选的破折号和大括号)。这 格式是最常见的:
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
还允许使用以下其他格式:
aaaaaaaabbbbccccddddeeeeeeeeeeee {aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}
官方解释UUID
结果
脚本
SELECT ISNULL(1+1),isnull(1/0);
结果
脚本
SELECT JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME());
分析
JSON_ARRAY(value1[, value2[, ...]])
参数
value1[, value2[, ...]]
可选的。一些值,他们将被放在 JSON 数组中。
JSON_ARRAY()
函数评估参数中的所有的值,并返回一个包含了所有参数的 JSON 数组。这里可能有一些转换发生:
TRUE
被转换为true
FALSE
被转换为false
NULL
被转换为null
- 日期,时间,日期时间 被转换为 字符串
结果
脚本
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4);
分析
参数
json
必需的。被修改的 JSON 文档。
path
必需的。添加新元素的路径。一个有效的路径表达式,它不能包含 或 。
*
**
value
必需的。被添加到数组的新元素值。
结果
脚本
SET @json = '[1, [2, 3], {"a": [4, 5]}]';
SELECT JSON_ARRAY_INSERT(@json, '$[0]', 0);
分析
JSON_ARRAY_INSERT(json, path, value[, path2, value2] ...)
参数
json
必需的。被修改的 JSON 文档。
path
必需的。插入新元素的数组元素位置。一个有效的路径表达式,它不能包含 或 。比如 和 表示在数组的开头插入新元素。
*
**
$[0]
$.a[0]
value
必需的。入到数组的新元素值。
结果
脚本
CREATE TABLE `student_score` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`subject` VARCHAR(255) NOT NULL,
`score` INT NOT NULL
);
INSERT INTO `student_score` (`name`, `subject`, `score`)
VALUES
('Tom', 'Math', 80),
('Tom', 'English', 90),
('Tim', 'English', 98);
SELECT
name AS `Name`,
JSON_ARRAYAGG(subject) AS `Subjects`
FROM student_score
GROUP BY name;
分析
JSON_ARRAYAGG(expr)
我们通常在 MySQL 中按如下方式使用 函数:
JSON_ARRAYAGG()
SELECT JSON_ARRAYAGG(expr), ... FROM table_name [WHERE ...] [GROUP BY group_expr1, group_expr2, ...];
参数
expr
必须的。它可以是一个列名,也可以是一个表达式。
结果
脚本
SELECT
JSON_CONTAINS('[1, 2, [3, 4]]', '2'),
JSON_CONTAINS('[1, 2, [3, 4]]', '2', '$[2]');
分析
JSON_CONTAINS(target_json, candidate_json) JSON_CONTAINS(target_json, candidate_json, path)
参数
target_json
必需的。一个 JSON 文档。
candidate_json
必需的。被包含的 JSON 文档。
path
可选的。一个路径表达式。
结果
脚本
SELECT
JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'one', '$[0]', '$[3]'),
JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[0]', '$[3]');
分析
JSON_CONTAINS_PATH(json, one_or_all, path[, path])
参数
json
必需的。一个 JSON 文档。
one_or_all
必需的。可用值:, 。它指示是否检查所有的路径。
'one'
'all'
path
必需的。您应该至少指定一个路径表达式。
结果
脚本
SELECT JSON_DEPTH('[]'), JSON_DEPTH('[1, 2]'), JSON_DEPTH('[1, [2, 3]]');
分析
JSON_DEPTH(json)
参数
json
必需的。一个 JSON 文档。
- 一个空的数组、空的对象或者纯值的深度是 1。
- 一个仅包含深度为 1 的元素的数组的深度是 2。
- 一个所有成员的值的深度为 1 的对象的深度是 2。
- 除此之外的其他 JSON 文档的深度都大于 2.
结果
脚本
SELECT JSON_EXTRACT('[1, 2, {"x": 3}]', '$[2].x', '$[1]', '$[0]');
分析
JSON_EXTRACT(json, path, ...)
参数
json
必需的。一个 JSON 文档。
path
必需的。您应该至少指定一个路径表达式。
结果
脚本
SET @array = '[1, [2, 3], {"a": [4, 5]}]';
# 在数组的开头插入一个元素
SELECT JSON_INSERT(@array, '$[0]', 0, '$[3]', 6);
分析
JSON_INSERT(json, path, value[, path2, value2] ...)
参数
json
必需的。被修改的 JSON 文档。
path
必需的。一个有效的路径表达式。
value
必需的。插入的数据。
结果
脚本
SELECT JSON_KEYS('{"x": 1, "y": 2, "z": 3}');
分析
JSON_KEYS(json) JSON_KEYS(json, path)
参数
json
必需的。一个 JSON 对象文档。
path
可选的。路径表达式。
结果
脚本
SELECT
JSON_LENGTH('1'),
JSON_LENGTH('true'),
JSON_LENGTH('[1, 2]'),
JSON_LENGTH('{"x": 1, "y": 2}') ;
分析
JSON_LENGTH(json) JSON_LENGTH(json, path)
参数
json
必需的。一个 JSON 文档。
path
可选的。一个路径表达式。
如果指定了 , 函数返回 JSON 文档中由路径指定的值的长度,否则返回 JSON 文档的长度。函数按照如下规则计算 JSON 文档的长度:
path
JSON_LENGTH()
JSON_LENGTH()
- 纯值的长度是 1。比如, , , , , 的长度都是 1。
1
'"x"'
true
false
null
- 数组的长度是数组元素的数量。比如, 的长度是 2。
[1, 2]
- 对象的长度是对象成员的数量。比如, 的长度是 1。
{"x": 1}
- 内嵌的数组或对象不参与计算长度。比如, 的长度是 1。
{"x": [1, 2]}
如果存在以下的情况, 函数将返回 :
JSON_LENGTH()
NULL
- 如果 JSON 文档中不存在指定的路径。
- 如果任意一个参数为 。
NULL
结果
脚本
SELECT
JSON_MERGE_PATCH('[1, 2]', '[2, 3]') as `[1, 2] + [2, 3]`,
JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}'),
JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}');
分析
JSON_MERGE_PATCH(json1, json2, ...)
参数
json1
必需的。一个 JSON 对象文档。
json2
必需的。一个 JSON 对象文档。
MySQL 函数返回一个由参数指定的多个 JSON 文档合并后的 JSON 文档。执行的是替换合并,即在相同键值时,只保留后面的值。合并的规则如下:
JSON_MERGE_PATCH()
JSON_MERGE_PATCH()
如果第一个参数不是对象,则合并的结果与第二个参数合并空对象的结果相同。
如果第二个参数不是对象,则合并的结果为第二个参数。
如果两个参数都是对象,则合并的对象具有以下成员:
- 只存在于第一个对象中的成员
- 只存在于第二个对象中且值不是 的成员
null
- 存在于第二个对象且值不是 ,并且在第一个对象中有对应的相同键的成员
null
也就是说,只有两个对象合并的结果才是对象。如果两个参数为不同的 JSON 类型或者都不是 JSON 对象,则合并结果是第二个参数。
结果
脚本
SELECT JSON_MERGE_PRESERVE('[1, 2]', '[2, 3]', '[3, 4, 5]') as 合并数组,
JSON_MERGE_PRESERVE('{"x": 1}', '{"x": 2, "y": 3}') as 合并对象,
JSON_MERGE_PRESERVE('1', 'true', '"hello"', 'null') as 合并纯值,
JSON_MERGE_PRESERVE('{"x": 1}', '[1, 2]') as 合并数组和对象;
分析
JSON_MERGE_PRESERVE(json1, json2, ...)
参数
json1
必需的。一个 JSON 对象文档。
json2
必需的。一个 JSON 对象文档。
MySQL 函数返回一个由参数指定的多个 JSON 文档合并后的 JSON 文档。按照如下规则合并多个 JSON 文档:
JSON_MERGE_PRESERVE()
JSON_MERGE_PRESERVE()
- 两个数组合并为一个数组,保留所有数组中的元素。
- 两个对象合并为一个对象,保留所有的键和值。
- 一个纯值会被包装成一个数组并作为数组进行合并
- 对象和数组合并时,会将对象包装到一个数组中并作为数组进行合并。
结果
脚本
SELECT JSON_OBJECT(
'name',
'Tim',
'age',
20,
'friend',
JSON_OBJECT('name', 'Jim', 'age', 20),
'hobby',
JSON_ARRAY('games', 'sports')
) ;
分析
JSON_OBJECT(key, value[, key2, value2, ...])
参数
key
必需的。对象中的键。
value
必需的。对象中的 的值
key
结果
脚本
CREATE TABLE `student_score` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`subject` VARCHAR(255) NOT NULL,
`score` INT NOT NULL
);
INSERT INTO `student_score` (`name`, `subject`, `score`)
VALUES
('Tom', 'Math', 80),
('Tom', 'English', 90),
('Tim', 'English', 98);
SELECT
name AS `Name`,
JSON_OBJECTAGG(subject, score) AS `Scores`
FROM student_score
GROUP BY name;
分析
SELECT JSON_OBJECTAGG(key_expr, value_expr), ... FROM table_name [WHERE ...] [GROUP BY group_expr1, group_expr2, ...];
参数
key_expr
必须的。它的值作为结果对象中的键值对中的键。它可以是一个列名,也可以是一个表达式。
value_expr
可选的。它的值作为结果对象中的键值对中的值。它可以是一个列名,也可以是一个表达式。
结果
脚本
SELECT JSON_OVERLAPS('[1, 2, 3]', '[3, 4, 5]') as 比较数组,
JSON_OVERLAPS('[1, 2, 3]', '[3, 4, 5]') as 比较对象,
JSON_OVERLAPS('[1, 2, 3]', '[3, 4, 5]') as 比较纯值和数组,
JSON_OVERLAPS('1', '1') as 比较纯值;
分析
JSON_OVERLAPS(json1, json2)
参数
json1
必需的。一个 JSON 文档。
json2
必需的。另一个 JSON 文档。
- 比较两个数组时,如果两个数组至少有一个相同的元素返回 ,否则返回 。
1
0
- 比较两个对象时,如果两个对象至少有一个相同的键值对返回 ,否则返回 。
1
0
- 比较两个纯值时,如果两个值相同返回 ,否则返回 。
1
0
- 比较纯值和数组时,如果值是这个数组中的直接元素返回 ,否则返回 。
1
0
- 比较纯值和对象的结果为 。
0
- 比较数组和对象的结果为 。
0
JSON_OVERLAPS()
不会对参数的数据类型进行转换。
结果
脚本
SELECT JSON_PRETTY('[1, 2, 3]');
分析
JSON_PRETTY(json)
参数
json
必需的。一个 JSON 文档或 JSON 类型的值。
结果
脚本
SELECT
JSON_QUOTE('123'),
JSON_QUOTE('NULL'),
JSON_QUOTE('"NULL"');
分析
JSON_QUOTE(str)
参数
str
必需的。一个字符串。
下表中的特殊字符将使用反斜杠转义:
转义序列 | 序列表示的字符 |
---|---|
\" |
双引号" |
\b |
退格字符 |
\f |
换页符 |
\n |
换行符 |
\r |
回车符 |
\t |
制表符 |
\\ |
反斜杠\ |
\uXXXX |
Unicode 值 的 UTF-8 字节XXXX |
结果
脚本
SELECT JSON_REMOVE('[0, 1, 2, [3, 4]]', '$[0]', '$[2]') as 从数组中删除,
JSON_REMOVE('{"x": 1, "y": 2}', '$.x') as 从对象中删除;
分析
JSON_REMOVE(json, path[, path] ...)
参数
json
必需的。一个 JSON 文档。
path
必需的。一个有效的路径表达式
结果
脚本
SET @obj = '{"x": 1}';
SELECT JSON_REPLACE(@obj, '$.x', 'true');
分析
JSON_REPLACE(json, path, value[, path2, value2] ...)
参数
json
必需的。被修改的 JSON 文档。
path
必需的。一个有效的路径表达式
value
必需的。新的数据。
结果
脚本
SET @schema = '{
"id": "http://json-schema.org/geo",
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "A geographical coordinate",
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"y": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": ["x", "y"]
}';
SET @json_doc = '{"x": 1, "y": 2}';
SELECT JSON_SCHEMA_VALID(@schema, @json_doc);
分析
JSON_SCHEMA_VALID(schema, json_doc)
参数
schema
必需的。一个 JSON 模式。它必须是一个有效的 JSON 对象。
json_doc
必需的。被验证的 JSON 文档。
结果
脚本
SET @schema = '{
"id": "http://json-schema.org/geo",
"$schema": "http://json-schema.org/draft-04/schema#",
"description": "A geographical coordinate",
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"y": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": ["x", "y"]
}';
SET @json_doc = '{"x": 1, "y": 2}';
SELECT JSON_SCHEMA_VALIDATION_REPORT(@schema, @json_doc) AS Report ;
分析
JSON_SCHEMA_VALIDATION_REPORT(schema, json_doc)
参数
schema
必需的。一个 JSON 模式。它必须是一个有效的 JSON 对象。
json_doc
必需的。被验证的 JSON 文档。
结果
函数大全1
函数大全2
函数大全4
函数大全5
函数大全6
函数大全7
函数大全8