MySQL --- 函数大全 4

目录

1.JSON 文档中值的路径        JSON_SEARCH()

 2.将数据插入 JSON 文档        JSON_SET()

3.释放 JSON 列值的二进制表示形式的空间部分更新后        JSON_STORAG_FREE()

4.用于存储 JSON 文档的二进制表示形式的空间       JSON_STORAG_SIZE()

5.从 JSON 表达式返回数据作为关系表       JSON_TABLE()

6.JSON 值的类型       JSON_TYPE()

7.取消引号的 JSON 值       JSON_UNQUOTE()

8.JSON 值是否有效        JSON_VALLD()

9.从指定路径的 JSON 文档中提取值      JSON_VALUE()

10.当前行访问上一行的数据或上一行之前的行        LAG()

11.返回参数的月份的最后一天        LAST_DAY

12.最后一个插入的“自动增量”列的值        LAST_INSERT_ID()

13.窗口框架最后一行的参数值        LAST_VALUE()

14.返回小写参数        LOWER() / LCAST()

15.分区内当前行前导行的参数值        LEAD()

16.返回最小的参数        LEAST()

17.返回指定的最左侧字符数        LEFT()

18.返回字符串的长度(以字节为单位)        LENGTH()

19.简单的模式匹配        LIKE

20.从点值构造线字符串        LINESTRING()

21.返回参数的自然对数        LN()

22.加载命名文件        LOAD_FILE()

23.返回子字符串第一次出现的位置        LOCATE()

24.返回第一个参数的自然对数        LOG()

25.返回参数的以 10 为底的对数        LOG10()

26.返回参数的以 2 为底的对数        LOG2()

27.返回小写参数        LOWER()

28.返回字符串参数,用指定的字符串左填充        LAPD()

29.删除前导空格        LTRIM()

30.返回一组逗号分隔的字符串        MAKE_SET()

31.从一年中的哪一天创建日期        MAKEDATE()

32.从小时、分钟、秒创建时间        MAKETIME()

33.阻止,直到复制副本读取并应用了所有更新,直到指定位置 MASTER_POS_WAIT()

34.执行全文搜索        MATCH()

35.返回最大值        MAX()

36.一个几何图形的 MBR 是否包含另一个几何图形的 MBR       MBRContains()

37.一个 MBR 是否被另一个 MBR 覆盖        MBRCoverdBy()

38.一个 MBR 是否覆盖另一个 MBR        MBRCovers()

39.两个几何形状的 MBR 是否不相交        MBRDisjoint()

40.两个几何形状的 MBR 是否相等        MBREquals()

41.两个几何形状的 MBR 是否相交        MBRIntersects()

42.两个几何形状的 MBR 是否重叠        MBROverlaps()

43.两个几何形状的 MBR 是否接触        MBRTouches()

44.一个几何图形的 MBR 是否在另一个几何图形的 MBR 内        MBRWithin()

45.计算 MD5 校验和        MD5()

46.数检查一个指定的值是否是一个 JSON 数组中的元素        MEMBER OF()

47.从参数返回微秒        MICROSECOND()

48.返回从指定位置开始的子字符串        MID()

49.返回最小值        MIN()

50.从参数返回分钟数        MINUTE()


1.JSON 文档中值的路径        JSON_SEARCH()

脚本

SET @json = '[
  {
    "name": "Tim",
    "age": 20,
    "hobbies": [
      { "name": "Car", "weight": 10 },
      { "name": "Sports", "weight": 20 }
    ]
  },
  {
    "name": "Tom",
    "age": 20,
    "hobbies": [
      { "name": "Reading", "weight": 10 },
      { "name": "Sports", "weight": 20 }
    ]
  }
]';

SELECT JSON_SEARCH(@json, 'all', 'S%');

分析

JSON_SEARCH(json, one_or_all, search_str)
JSON_SEARCH(json, one_or_all, search_str, escape_char)
JSON_SEARCH(json, one_or_all, search_str, escape_char, path)

参数

  • json

    必需的。一个 JSON 文档。

  • one_or_all

    必需的。可用值:, 。 根据 参数决定是否返回所有匹配的路径:'one''all'JSON_SEARCH()one_or_all

    • 如果是 , 函数将返回第一个匹配的路径。'one'JSON_SEARCH()
    • 如果是 , 函数将返回所有匹配的路径。所有的路径会包装在一个数组内返回。'all'JSON_SEARCH()
  • search_str

    必需的。被搜索的字符串。您可以在 参数中使用 和 通配符,就像 LIKE 一样:search_str%_

    • %匹配任意数量的任意字符。
    • _匹配一个任意字符。
  • escape_char

    可选的。如果 中包含 和 ,需要在他们之前添加转移字符。默认是 。search_str%_\

  • path

    可选的。只能在此路径下进行搜索。

结果

 2.将数据插入 JSON 文档        JSON_SET()

脚本

SET @obj = '{"x": 1}';
SELECT JSON_SET(@obj, '$.x', '10', '$.y', '[1, 2]');

分析

JSON_SET(json, path, value[, path2, value2] ...)

参数

json

必需的。被修改的 JSON 文档。

path

必需的。一个有效的路径表达式,它不能包含 或 。***

value

必需的。要设置的数据。

结果

3.释放 JSON 列值的二进制表示形式的空间部分更新后        JSON_STORAG_FREE()

脚本

CREATE TABLE test_json_storage_free (
    json_col JSON NOT NULL
);

INSERT INTO test_json_storage_free
VALUES ('{"x": 1, "y": "abcd"}');

SELECT
    json_col,
    JSON_STORAGE_SIZE(json_col) AS JSON_STORAGE_SIZE,
    JSON_STORAGE_FREE(json_col) AS JSON_STORAGE_FREE
FROM
    test_json_storage_free;

分析

JSON_STORAGE_FREE(json)

参数

json

必需的。一个 JSON 文档。它可以是一个 JSON 字符串,或者一个 JSON 列。

结果

4.用于存储 JSON 文档的二进制表示形式的空间       JSON_STORAG_SIZE()

脚本

SELECT
    'Size' AS `Json`,
    JSON_STORAGE_SIZE('0') AS `0`,
    JSON_STORAGE_SIZE('"a"') AS `a`,
    JSON_STORAGE_SIZE('true') AS `true`,
    JSON_STORAGE_SIZE('[1, 2, 3]') AS `[1, 2, 3]`;

分析

JSON_STORAGE_SIZE(json)

参数

json

必需的。一个 JSON 文档。它可以是一个 JSON 字符串,或者一个 JSON 列。

结果

5.从 JSON 表达式返回数据作为关系表       JSON_TABLE()

脚本

SELECT
    *
FROM
    JSON_TABLE(
        '[{"x":10,"y":11}, {"y": 21}, {"x": 30}]',
        '$[*]'
        COLUMNS (
            id FOR ORDINALITY,
            x INT PATH '$.x' DEFAULT '100' ON EMPTY,
            y INT PATH '$.y'
        )
    ) t;

分析

JSON_TABLE(
    json,
    path COLUMNS (column[, column[, ...]])
)

column:
    name FOR ORDINALITY
    |  name type PATH string_path [on_empty] [on_error]
    |  name type EXISTS PATH string_path
    |  NESTED [PATH] path COLUMNS (column[, column[, ...]])

on_empty:
    {NULL | DEFAULT json_string | ERROR} ON EMPTY

on_error:
    {NULL | DEFAULT json_string | ERROR} ON ERROR

参数

  • json

    必需的。一个 JSON 文档。

  • path

    必需的。一个路径表达式。

  • column

    必需的。定义一个列。您可以使用如下 4 中方式定义一个列:

    • name FOR ORDINALITY: 生成一个从 1 开始的计数器列,名字为 。name
    • name type PATH string_path [on_empty] [on_error]: 将由路径表达式 指定的值放在名字为 的列中。string_pathname
    • name type EXISTS PATH string_path:根据 指定的位置是否有值将 或 放在名字为 的列中。string_path10name
    • NESTED [PATH] path COLUMNS (column[, column[, ...]]): 将内嵌的对象或者数组中的数据拉平放在一行中。
  • {NULL | ERROR | DEFAULT value} ON EMPTY

    可选的。如果指定了,它决定了指定路径下没有数据时的返回值:

    • NULL ON EMPTY: 如果指定路径下没有数据, 函数将使用 ,这是默认的行为。JSON_TABLE()NULL
    • DEFAULT value ON EMPTY: 如果指定路径下没有数据, 函数将使用 。JSON_TABLE()value
    • ERROR ON EMPTY: 如果指定路径下没有数据, 函数将抛出一个错误。JSON_TABLE()
  • {NULL | ERROR | DEFAULT value} ON ERROR

    可选的。如果指定了,它决定了处理错误的逻辑:

    • NULL ON ERROR: 如果有错误, 函数将使用 ,这是默认的行为。JSON_TABLE()NULL
    • DEFAULT value ON ERROR: 如果有错误, 函数将使用 。JSON_TABLE()value
    • ERROR ON ERROR: 如果有错误, 函数将抛出一个错误。JSON_TABLE()

结果

MySQL --- 函数大全 4_第1张图片

6.JSON 值的类型       JSON_TYPE()

脚本

SELECT JSON_TYPE('true'), JSON_TYPE('null'), JSON_TYPE('"abc"');

分析

JSON_TYPE(json_value)

参数

json_value

必需的。一个 JSON 值。

JSON值类型

  • OBJECT: JSON 对象
  • ARRAY: JSON 数组
  • BOOLEAN: JSON 布尔值
  • NULL: JSON 值null
  • INTEGER: MySQL , , , 和 类型的值TINYINTSMALLINTMEDIUMINTINTBIGINT
  • DOUBLE: MySQL 和 类型的值DOUBLEFLOAT
  • DECIMAL: MySQL 和 类型的值DECIMALNUMERIC
  • DATETIME: MySQL 和 类型的值DATETIMETIMESTAMP
  • DATE: MySQL 类型的值DATE
  • TIME: MySQL 类型的值TIME
  • STRING: MySQL , , , 和CHARVARCHARTEXTENUMSET
  • BLOB: MySQL , , 和BINARYVARBINARYBLOBBIT
  • OPAQUE: 以上之外的类型

结果

7.取消引号的 JSON 值       JSON_UNQUOTE()

脚本

SELECT JSON_UNQUOTE('"abc"');

分析

参数

json_val

必需的。一个字符串。

MySQL转义字符

结果

MySQL --- 函数大全 4_第2张图片

8.JSON 值是否有效        JSON_VALLD()

脚本

SELECT JSON_VALID(1), JSON_VALID('1');

分析

JSON_VALID(str)

参数

str

必需的。需要被验证的内容。

结果

MySQL --- 函数大全 4_第3张图片

9.从指定路径的 JSON 文档中提取值      JSON_VALUE()

脚本

SET @json = '[
  {
    "name": "Tim",
    "age": 20,
    "amount": 123.456,
    "note": "He is perfect."
  },
  {
    "name": "Tom",
    "age": 20,
    "amount": 456.1
  }
]';
SELECT JSON_VALUE(@json, '$[0].age'),
       JSON_VALUE(@json, '$[1].amount'),
       JSON_VALUE(@json, '$[0].note' DEFAULT 'Nothing' ON EMPTY) AS `$[0].note`,
       JSON_VALUE(@json, '$[1].note' DEFAULT 'Nothing' ON EMPTY) AS `$[1].note`;

分析

JSON_VALUE(json, path [RETURNING type] [{NULL | ERROR | DEFAULT value} ON EMPTY] [{NULL | ERROR | DEFAULT value} ON ERROR])

参数

  • json

    必需的。一个 JSON 文档。

  • path

    必需的。一个路径表达式。

  • RETURNING type

    可选的。他决定了返回值的类型。您可以使用下面值中的一个:

    • FLOAT
    • DOUBLE
    • DECIMAL
    • SIGNED
    • UNSIGNED
    • DATE
    • TIME
    • DATETIME
    • YEAR(MySQL 8.0.22 及更高版本)
    • CHAR
    • JSON
  • {NULL | ERROR | DEFAULT value} ON EMPTY

    可选的。如果指定了,它决定了指定路径下没有数据的返回值:

    • NULL ON EMPTY: 如果指定路径下没有数据, 函数将返回 ,这是默认的行为。JSON_VALUE()NULL
    • DEFAULT value ON EMPTY: 如果指定路径下没有数据, 函数将返回 。JSON_VALUE()value
    • ERROR ON EMPTY: 如果指定路径下没有数据, 函数将抛出一个错误。JSON_VALUE()
  • {NULL | ERROR | DEFAULT value} ON ERROR

    可选的。如果指定了,它决定了处理错误的逻辑:

    • NULL ON ERROR: 如果有错误, 函数将返回 ,这是默认的行为。JSON_VALUE()NULL
    • DEFAULT value ON ERROR: 如果有错误, 函数将返回 。JSON_VALUE()value
    • ERROR ON ERROR: 如果有错误, 函数将抛出一个错误。JSON_VALUE()

结果

10.当前行访问上一行的数据或上一行之前的行        LAG()

脚本

create table a
(
    id    int auto_increment primary key,
    score int
);

insert into a (score)
values (90),
       (90),
       (85),
       (80),
       (70);

select *,lag(score) over () from a;

分析

访问上一行的数据或上一行之前的行 

结果

MySQL --- 函数大全 4_第4张图片

11.返回参数的月份的最后一天        LAST_DAY

脚本

select LAST_DAY(now());

结果

12.最后一个插入的“自动增量”列的值        LAST_INSERT_ID()

脚本

create table b
(
    id   int auto_increment primary key,
    name varchar(32)
);

insert into b(name) value ('张三');

select last_insert_id();

insert into b(name) values ('李四'),('王五');
select last_insert_id();

分析

必须要有自动增量,返回最后一次插入的自动增量的值

结果

13.窗口框架最后一行的参数值        LAST_VALUE()

脚本


CREATE TABLE order_content
(
    order_id    VARCHAR(8),
    user_id     VARCHAR(8),
    order_price INT,
    order_date  DATE
);
INSERT INTO order_content (order_id, user_id, order_price, order_date)
    VALUE ('o001', 'u001', 800, '2021-06-18')
    , ('o002', 'u001', 800, '2021-06-19')
    , ('o003', 'u001', 1000, '2021-06-22')
    , ('o004', 'u001', 1200, '2021-06-24')
    , ('o005', 'u002', 400, '2021-06-25')
    , ('o006', 'u002', 1500, '2021-06-26')
    , ('o007', 'u002', 2100, '2021-06-28')
    , ('o008', 'u003', 900, '2021-07-01')
    , ('o009', 'u003', 700, '2021-07-03')
    , ('o010', 'u003', 1700, '2021-07-04');

SELECT *,
       LAST_VALUE(order_price) OVER (PARTITION BY user_id ORDER BY order_price) AS lastvalue
FROM order_content;

分析

LAST_VALUE () 函数是一个 窗口函数 ,允许您选择有序行集中的最后一行。. LAST_VALUE () 函数返回 expression 有序行集的最后一行的值

结果

MySQL --- 函数大全 4_第5张图片

14.返回小写参数        LOWER() / LCAST()

脚本

select lower('ASDF'),LCASE('ASDF');

分析

把大写字母转成小写字母

结果

15.分区内当前行前导行的参数值        LEAD()

脚本

create table a
(
    id    int auto_increment primary key,
    score int
);

insert into a (score)
values (90),
       (90),
       (85),
       (80),
       (70);
insert into a (score) value (100);

select *, lead(score) over ()
from a;

分析

与LAG()相反

结果

MySQL --- 函数大全 4_第6张图片

16.返回最小的参数        LEAST()

脚本

select least(90,25,63,51);

结果

17.返回指定的最左侧字符数        LEFT()

脚本

SELECT LEFT('hello world', 5);

分析

LEFT(str,len)

返回str从前面数len个字符

结果

MySQL --- 函数大全 4_第7张图片

18.返回字符串的长度(以字节为单位)        LENGTH()

脚本

select length('hello world!')

分析

空格特殊符号也算一个长度

结果

19.简单的模式匹配        LIKE

脚本

create table b
(
    id   int auto_increment primary key,
    name varchar(32)
);

insert into b(name) value ('张三');
insert into b(name) values ('李四'),('王五');

#名字像(like)_ _(两个字的)
select * from b where name like '__';

结果

MySQL --- 函数大全 4_第8张图片

20.从点值构造线字符串        LINESTRING()

脚本

SET @ls = 'LineString(1 1,2 2,3 3)';

分析

线字符串例子

  • 在世界地图上,物体 可以代表河流。LineString

  • 在城市地图中,对象可以 代表街道。LineString

线字符串性能

  • A 的坐标为 线段,由每对连续的点定义。LineString

21.返回参数的自然对数        LN()

脚本

select ln(1), ln(10),ln(exp(1));

分析

exp(x)代表自然对数(e)的X次方 exp(1)=e

与log()一样

至于它结果为什么是0/2.3......./1  这是数学问题

结果

22.加载命名文件        LOAD_FILE()

脚本

SELECT LOAD_FILE('test.txt');

分析

文件不存在会返回null

结果

23.返回子字符串第一次出现的位置        LOCATE()

脚本

SELECT LOCATE('a', 'hello world'),LOCATE('ld', 'hello world');

结果

24.返回第一个参数的自然对数        LOG()

脚本

select log(2), log(exp(1)), log(1);

分析

与ln()一样

log底

普通应用都是10

计算机学科是2

编程语言里面是e

结果

25.返回参数的以 10 为底的对数        LOG10()

脚本

select log10(10), log10(100), log10(1);

 结果

26.返回参数的以 2 为底的对数        LOG2()

脚本

select log2(2), log2(4), log2(1);

结果

MySQL --- 函数大全 4_第9张图片

27.返回小写参数        LOWER()

脚本

select lower('ASDF');

分析

大写转小写

结果

MySQL --- 函数大全 4_第10张图片

28.返回字符串参数,用指定的字符串左填充        LAPD()

脚本

SELECT LPAD('aaa',6,'**');

分析

返回字符串str,左填充用字符串padstr填补到len字符长度。 如果str为大于len长,返回值被缩短至len个字符(不能超过 len 长)。

结果

29.删除前导空格        LTRIM()

脚本

select ltrim('     hello')

结果

MySQL --- 函数大全 4_第11张图片

30.返回一组逗号分隔的字符串        MAKE_SET()

脚本

SELECT MAKE_SET(1, 'a','b','c','d');

分析

MAKE_SET(bits,str1,str2,...)

返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串。str1对应于位0,str2到第1位,依此类推。在str1,str1有NULL值,…那么不添加到结果。

bits将转为二进制,1的二进制为0001,倒过来为1000,所以取str1(a),打印a.

结果

31.从一年中的哪一天创建日期        MAKEDATE()

脚本

SELECT MAKEDATE(2022,31), MAKEDATE(2022,100);

分析

语法

MAKEDATE(yearday)

参数值

参数 描述
year 必需。年(4位)
day 必需。一个表示一年中日期的数字

根据年份和天数值创建并返回日期

结果

32.从小时、分钟、秒创建时间        MAKETIME()

脚本

SELECT MAKETIME(12,15.6,30.35632);

分析

语法

MAKETIME(hourminutesecond)

参数值

参数 描述
hour 必需。小时值
minute 必需。分钟值
second 必需。秒值

根据小时、分钟和秒值创建并返回时间值:

结果

MySQL --- 函数大全 4_第12张图片

33.阻止,直到复制副本读取并应用了所有更新,直到指定位置 MASTER_POS_WAIT()

脚本

SELECT   MASTER_POS_WAIT('mysql-bin.000001', 51635390,60);

分析

select master_pos_wait(file, pos[,   timeout]).

File 和pos 是对应的主库的值,可以通过show master status 得到。

Timeout 是等待的秒数。不加代表为0 ,立即返回结果。如果指定了时间,但是已经达到了position ,那么还是会立即返回。也就是等待事件在从库未到达指定的position 才生效。

这个函数主要用于从库执行,查看从库是否已经执行到了指定的主库上binlog position 。

Action

Return

无论是否指定时间,达到

0

指定时间内达到

1

指定时间内未达到

-1

停止从属sql_thread

NULL

结果

34.执行全文搜索        MATCH()

脚本

CREATE TABLE c (
  id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
  title VARCHAR(200),
  body TEXT,
   FULLTEXT (title,body)
);

INSERT INTO c (title,body) VALUES
  ('MySQL Tutorial','DBMS stands for DataBase ...'),
  ('How To Use MySQL Well','After you went through a ...'),
  ('Optimizing MySQL','In this tutorial we will show ...'),
  ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
  ('MySQL vs. YourSQL','In the following database comparison ...'),
  ('MySQL Security','When configured properly, MySQL ...');


select * from c;

SELECT * FROM c WHERE MATCH (title,body)   AGAINST ('database');

分析

TIP: 全文搜索,那么全文索引必不可少 FULLTEXT

结果

35.返回最大值        MAX()

脚本

create table a
(
    id    int auto_increment primary key,
    score int
);

insert into a (score)
values (90),
       (90),
       (85),
       (80),
       (70);
insert into a (score) value (100);

select max(score)
from a;

结果

36-43公共代码

SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
SET @g2 = ST_GeomFromText('Point(1 1)');

36.一个几何图形的 MBR 是否包含另一个几何图形的 MBR       MBRContains()

脚本

SELECT MBRContains(@g1, @g2);

结果

37.一个 MBR 是否被另一个 MBR 覆盖        MBRCoverdBy()

脚本

SELECT MBRCovers(@g1, @g2),MBRCoveredby(@g2, @g1);

结果

38.一个 MBR 是否覆盖另一个 MBR        MBRCovers()

脚本

SELECT MBRCovers(@g1, @g2),MBRCovers(@g2, @g1);

结果

39.两个几何形状的 MBR 是否不相交        MBRDisjoint()

脚本

select mbrdisjoint(@g1,@g2);

结果

 

40.两个几何形状的 MBR 是否相等        MBREquals()

脚本

select  mbrequals(@g1,@g2);

结果

41.两个几何形状的 MBR 是否相交        MBRIntersects()

脚本

select mbrintersects(@g1,@g2);

结果

 

42.两个几何形状的 MBR 是否重叠        MBROverlaps()

脚本

select mbroverlaps(@g1,@g2);

结果

 

43.两个几何形状的 MBR 是否接触        MBRTouches()

脚本

select mbrtouches(@g1,@g2);

结果

 

44.一个几何图形的 MBR 是否在另一个几何图形的 MBR 内        MBRWithin()

脚本

select mbrwithin(@g1, @g2), mbrwithin(@g2, @g1);

结果

MySQL --- 函数大全 4_第13张图片

 

45.计算 MD5 校验和        MD5()

脚本

select md5('abc');

分析

MySQL 函数计算一个给定字符串的 MD5 摘要,并将结果作为一个 32 位的由十六进制字符组成的字符串返回

结果

46.数检查一个指定的值是否是一个 JSON 数组中的元素        MEMBER OF()

脚本

SELECT
    1 MEMBER OF('[1, 2, "a"]'),
    'a' MEMBER OF('[1, 2, "a"]'),
    'z' MEMBER OF('[1, 2, "a"]');

分析

value MEMBER OF(json_array)

参数

  • value

    必需的。一个值。它可以是任意类型。

  • json_array

    必需的。一个 JSON 数组。

结果

 

47.从参数返回微秒        MICROSECOND()

脚本

SELECT MICROSECOND('12:00:00.123456'),MICROSECOND('2022-12-13 16:50:2.00001246');

分析

返回时间里面秒数后面的毫秒值

结果

 

48.返回从指定位置开始的子字符串        MID()

脚本

SELECT MID('Quadratically',5);

分析

MID(str, len)

相当于截取len-1个字符,返回余下的字符

结果

49.返回最小值        MIN()

脚本

create table a
(
    id    int auto_increment primary key,
    score int
);

insert into a (score)
values (90),
       (90),
       (85),
       (80),
       (70);
insert into a (score) value (100);

select min(score)
from a;

结果

50.从参数返回分钟数        MINUTE()

脚本

select minute('2022-12-13 16:50:55');

结果

你可能感兴趣的:(mysql,mysql,数据库)