百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

针对MySQL特有函数的梧桐替代解决方法

wptr33 2025-04-07 20:06 11 浏览

MySQL 8.0 特有函数清单包含了一些重要的JSON函数、正则表达式函数和地理空间函数,我们针对这些内容,梳理了基于梧桐6.0版本的替代解决方法。以方便用户在平时的国产化项目及其它工作中更加方便的对照及参考。

MySQL 8.0 特有函数清单(扩展)

JSON 函数:

  1. JSON_ARRAYAGG(): 将某列的值聚合成一个JSON数组
  2. JSON_OBJECTAGG(): 将键值对聚合成一个JSON对象
  3. JSON_PRETTY(): 格式化输出JSON字符串,使其更易读
  4. JSON_TABLE(): 将JSON数组转换为关系表
  5. JSON_MERGE_PATCH(): 将两个JSON对象合并,后者的键值覆盖前者的键值
  6. JSON_STORAGE_SIZE(): 计算JSON对象的存储大小
  7. JSON_KEYS(): 获取JSON对象中的所有键
  8. JSON_DEPTH(): 计算JSON对象的嵌套深度
  9. JSON_LENGTH(): 计算JSON对象的长度
  10. JSON_CONTAINS(): 检查一个JSON对象是否包含另一个JSON对象
  11. JSON_CONTAINS_PATH(): 检查JSON对象是否包含指定路径
  12. JSON_EXTRACT(): 从JSON对象中提取指定路径的值
  13. JSON_REMOVE(): 从JSON对象中删除指定路径的值
  14. JSON_INSERT(): 向JSON对象中插入值
  15. JSON_REPLACE(): 替换JSON对象中的指定路径的值
  16. JSON_SET(): 设置JSON对象中的指定路径的值
  17. JSON_UNQUOTE(): 去掉JSON字符串的引号
  18. JSON_VALID(): 检查字符串是否为有效的JSON

正则表达式函数:

  1. REGEXP_LIKE(): 检查字符串是否匹配正则表达式
  2. REGEXP_INSTR(): 返回正则表达式匹配的位置
  3. REGEXP_SUBSTR(): 返回匹配正则表达式的子字符串
  4. REGEXP_REPLACE(): 用正则表达式替换字符串中的匹配部分

地理空间函数:

  1. ST_DISTANCE_SPHERE(): 计算球面上两点之间的距离
  2. ST_MAKEENVELOPE(): 创建一个矩形包络
  3. ST_MAKEPOINT(): 创建一个点
  4. ST_TRANSFORM(): 变换几何对象的坐标系
  5. ST_GEOMFROMGEOJSON(): 从GeoJSON创建几何对象
  6. ST_ASGEOJSON(): 将几何对象转换为GeoJSON
  7. ST_ISVALID(): 检查几何对象是否有效
  8. ST_ASTEXT(): 将几何对象转换为文本
  9. ST_SRID(): 返回几何对象的空间参考系统标识符
  10. ST_SETSRID(): 设置几何对象的空间参考系统标识符
  11. ST_DISTANCE(): 计算两几何对象之间的距离
  12. ST_INTERSECTS(): 检查两几何对象是否相交

详细说明及替代方案

JSON 函数:

  1. JSON_ARRAYAGG(): 将某列的值聚合成一个JSON数组
  2. MySQL 8.0:
  3. -- 将某列的值聚合成一个JSON数组
    SELECT JSON_ARRAYAGG(column) AS json_array FROM table_name;
  4. 梧桐 6.0 替代方案:
  5. -- 将某列的值聚合成一个JSON数组
    SELECT json_agg(column) AS json_array FROM table_name;
  6. JSON_OBJECTAGG(): 将键值对聚合成一个JSON对象
  7. MySQL 8.0:
  8. -- 将键值对聚合成一个JSON对象
    SELECT JSON_OBJECTAGG(key, value) AS json_object FROM table_name;
  9. 梧桐 6.0 替代方案:
  10. -- 将键值对聚合成一个JSON对象
    SELECT jsonb_object_agg(key, value) AS json_object FROM table_name;
  11. JSON_PRETTY(): 格式化输出JSON字符串,使其更易读
  12. MySQL 8.0:
  13. -- 格式化输出JSON字符串
    SELECT JSON_PRETTY('{"key": "value"}');
  14. 梧桐 6.0 替代方案:
  15. -- 格式化输出JSON字符串
    SELECT jsonb_pretty('{"key": "value"}'::jsonb);
  16. JSON_TABLE(): 将JSON数组转换为关系表
  17. MySQL 8.0:
  18. -- 将JSON数组转换为关系表
    SELECT * FROM JSON_TABLE(
    '[{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}]',
    "$[*]" COLUMNS (
    id INT PATH
    "$.id",
    name VARCHAR
    (50) PATH "$.name"
    )
    ) AS jt;
  19. 梧桐 6.0 替代方案:
  20. -- 将JSON数组转换为关系表
    SELECT * FROM json_to_recordset(
    '[{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}]'
    ) AS jt(id INT, name VARCHAR);
  21. JSON_MERGE_PATCH(): 将两个JSON对象合并,后者的键值覆盖前者的键值
  22. MySQL 8.0:
  23. -- 将两个JSON对象合并,后者的键值覆盖前者的键值
    SELECT JSON_MERGE_PATCH('{"a": 1, "b": 2}', '{"b": 3, "c": 4}');
  24. 梧桐 6.0 替代方案:
  25. -- 将两个JSON对象合并,后者的键值覆盖前者的键值
    SELECT '{"a": 1, "b": 2}'::jsonb || '{"b": 3, "c": 4}'::jsonb;
  26. JSON_STORAGE_SIZE(): 计算JSON对象的存储大小
  27. MySQL 8.0:
  28. -- 计算JSON对象的存储大小
    SELECT JSON_STORAGE_SIZE('{"a": 1, "b": 2}');
  29. 梧桐 6.0 替代方案:
  30. -- 计算JSON对象的存储大小
    SELECT pg_column_size('{"a": 1, "b": 2}'::jsonb);
  31. JSON_KEYS(): 获取JSON对象中的所有键
  32. MySQL 8.0:
  33. -- 获取JSON对象中的所有键
    SELECT JSON_KEYS('{"a": 1, "b": 2}');
  34. 梧桐 6.0 替代方案:
  35. -- 获取JSON对象中的所有键
    SELECT jsonb_object_keys('{"a": 1, "b": 2}'::jsonb);
  36. JSON_DEPTH(): 计算JSON对象的嵌套深度
  37. MySQL 8.0:
  38. -- 计算JSON对象的嵌套深度
    SELECT JSON_DEPTH('{"a": {"b": {"c": 1}}}');
  39. 梧桐 6.0 替代方案: 梧桐DB没有直接的替代函数,需要通过递归查询实现。
  40. -- 计算JSON对象的嵌套深度
    WITH RECURSIVE json_tree AS (
    SELECT
    jsonb_typeof('{"a": {"b": {"c": 1}}}'::jsonb) AS type,
    1 AS depth,
    '{"a": {"b": {"c": 1}}}'::jsonb AS js
    UNION ALL
    SELECT
    jsonb_typeof(value) AS type,
    depth + 1 AS depth,
    value
    FROM json_tree, jsonb_each(js)
    WHERE jsonb_typeof(js) = 'object'
    )
    SELECT MAX(depth) FROM json_tree;
  41. JSON_LENGTH(): 计算JSON对象的长度
  42. MySQL 8.0:
  43. -- 计算JSON对象的长度
    SELECT JSON_LENGTH('{"a": 1, "b": 2}');
  44. 梧桐 6.0 替代方案:
  45. -- 计算JSON对象的长度
    SELECT jsonb_array_length('{"a": 1, "b": 2}'::jsonb);
  46. JSON_CONTAINS(): 检查一个JSON对象是否包含另一个JSON对象
  47. MySQL 8.0:
  48. -- 检查一个JSON对象是否包含另一个JSON对象
    SELECT JSON_CONTAINS('{"a": 1, "b": 2}', '{"a": 1}');
  49. 梧桐 6.0 替代方案:
  50. -- 检查一个JSON对象是否包含另一个JSON对象
    SELECT '{"a": 1, "b": 2}'::jsonb @> '{"a": 1}'::jsonb;
  51. JSON_CONTAINS_PATH(): 检查JSON对象是否包含指定路径
  52. MySQL 8.0:
  53. -- 检查JSON对象是否包含指定路径
    SELECT JSON_CONTAINS_PATH('{"a": 1, "b": 2}', 'one', '$.a');
  54. 梧桐 6.0 替代方案: 梧桐DB没有直接的替代函数,可以通过 jsonb_path_exists 实现类似功能。
  55. -- 检查JSON对象是否包含指定路径
    SELECT jsonb_path_exists('{"a": 1, "b": 2}'::jsonb, '$.a');
  56. JSON_EXTRACT(): 从JSON对象中提取指定路径的值
  57. MySQL 8.0:
  58. -- 从JSON对象中提取指定路径的值
    SELECT JSON_EXTRACT('{"a": 1, "b": 2}', '$.a');
  59. 梧桐 6.0 替代方案:
  60. -- 从JSON对象中提取指定路径的值
    SELECT '{"a": 1, "b": 2}'::jsonb -> 'a';
  61. JSON_REMOVE(): 从JSON对象中删除指定路径的值
  62. MySQL 8.0:
  63. -- 从JSON对象中删除指定路径的值
    SELECT JSON_REMOVE('{"a": 1, "b": 2}', '$.a');
  64. 梧桐 6.0 替代方案:
  65. -- 从JSON对象中删除指定路径的值
    SELECT '{"a": 1, "b": 2}'::jsonb - 'a';
  66. JSON_INSERT(): 向JSON对象中插入值
  67. MySQL 8.0:
  68. -- 向JSON对象中插入值
    SELECT JSON_INSERT('{"a": 1}', '$.b', 2);
  69. 梧桐 6.0 替代方案: 梧桐DB没有直接的替代函数,可以通过 jsonb_set 实现类似功能。
  70. -- 向JSON对象中插入值
    SELECT jsonb_set('{"a": 1}'::jsonb, '{b}', '2'::jsonb);
  71. JSON_REPLACE(): 替换JSON对象中的指定路径的值
  72. MySQL 8.0:
  73. -- 替换JSON对象中的指定路径的值
    SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.a', 3);
  74. 梧桐 6.0 替代方案:
  75. -- 替换JSON对象中的指定路径的值
    SELECT jsonb_set('{"a": 1, "b": 2}'::jsonb, '{a}', '3'::jsonb);
  76. JSON_SET(): 设置JSON对象中的指定路径的值
  77. MySQL 8.0:
  78. -- 设置JSON对象中的指定路径的值
    SELECT JSON_SET('{"a": 1, "b": 2}', '$.a', 3);
  79. 梧桐 6.0 替代方案:
  80. -- 设置JSON对象中的指定路径的值
    SELECT jsonb_set('{"a": 1, "b": 2}'::jsonb, '{a}', '3'::jsonb);
  81. JSON_UNQUOTE(): 去掉JSON字符串的引号
  82. MySQL 8.0:
  83. -- 去掉JSON字符串的引号
    SELECT JSON_UNQUOTE('"hello"');
  84. 梧桐 6.0 替代方案: 梧桐DB没有直接的替代函数,可以使用 text 类型的转换来实现类似功能。
  85. -- 去掉JSON字符串的引号
    SELECT 'hello'::text;
  86. JSON_VALID(): 检查字符串是否为有效的JSON
  87. MySQL 8.0:
  88. -- 检查字符串是否为有效的JSON
    SELECT JSON_VALID('{"a": 1}');
  89. 梧桐 6.0 替代方案: 梧桐DB没有直接的替代函数,可以通过 TRY_CAST 进行 JSONB 类型转换判断。
  90. -- 检查字符串是否为有效的JSON
    SELECT CASE WHEN TRY_CAST('{"a": 1}' AS JSONB) IS NOT NULL THEN TRUE ELSE FALSE END;

正则表达式函数:

  1. REGEXP_LIKE(): 检查字符串是否匹配正则表达式
  2. MySQL 8.0:
  3. -- 检查字符串是否匹配正则表达式
    SELECT column FROM table_name WHERE REGEXP_LIKE(column, 'pattern');
  4. 梧桐 6.0 替代方案:
  5. -- 检查字符串是否匹配正则表达式
    SELECT column FROM table_name WHERE column ~ 'pattern';
  6. REGEXP_INSTR(): 返回正则表达式匹配的位置
  7. MySQL 8.0:
  8. -- 返回正则表达式匹配的位置
    SELECT REGEXP_INSTR(column, 'pattern') AS position FROM table_name;
  9. 梧桐 6.0 替代方案: 梧桐DB没有直接的替代函数,可以使用 POSITIONREGEXP_MATCHES 结合实现。
  10. -- 返回正则表达式匹配的位置
    SELECT POSITION((REGEXP_MATCHES(column, 'pattern'))[1] IN column) AS position FROM table_name;
  11. REGEXP_SUBSTR(): 返回匹配正则表达式的子字符串
  12. MySQL 8.0:
  13. -- 返回匹配正则表达式的子字符串
    SELECT REGEXP_SUBSTR(column, 'pattern') AS substring FROM table_name;
  14. 梧桐 6.0 替代方案:
  15. -- 返回匹配正则表达式的子字符串
    SELECT (REGEXP_MATCHES(column, 'pattern'))[1] AS substring FROM table_name;
  16. REGEXP_REPLACE(): 用正则表达式替换字符串中的匹配部分
  17. MySQL 8.0:
  18. -- 用正则表达式替换字符串中的匹配部分
    SELECT REGEXP_REPLACE(column, 'pattern', 'replacement') AS replaced_column FROM table_name;
  19. 梧桐 6.0 替代方案:
  20. -- 用正则表达式替换字符串中的匹配部分
    SELECT REGEXP_REPLACE(column, 'pattern', 'replacement') AS replaced_column FROM table_name;

地理空间函数:

  1. ST_DISTANCE_SPHERE(): 计算球面上两点之间的距离
  2. MySQL 8.0:
  3. -- 计算球面上两点之间的距离
    SELECT ST_DISTANCE_SPHERE(POINT(-71.060316, 48.432044), POINT(-71.055017, 48.431664));
  4. 梧桐 6.0 替代方案:
  5. -- 计算球面上两点之间的距离
    SELECT ST_Distance_Sphere(ST_MakePoint(-71.060316, 48.432044), ST_MakePoint(-71.055017, 48.431664));
  6. ST_MAKEENVELOPE(): 创建一个矩形包络
  7. MySQL 8.0:
  8. -- 创建一个矩形包络
    SELECT ST_MAKEENVELOPE(-71.060316, 48.432044, -71.055017, 48.431664);
  9. 梧桐 6.0 替代方案:
  10. -- 创建一个矩形包络
    SELECT ST_MakeEnvelope(-71.060316, 48.432044, -71.055017, 48.431664);
  11. ST_MAKEPOINT(): 创建一个点
  12. MySQL 8.0:
  13. -- 创建一个点
    SELECT ST_MAKEPOINT(-71.060316, 48.432044);
  14. 梧桐 6.0 替代方案:
  15. -- 创建一个点
    SELECT ST_MakePoint(-71.060316, 48.432044);
  16. ST_TRANSFORM(): 变换几何对象的坐标系
  17. MySQL 8.0:
  18. -- 变换几何对象的坐标系
    SELECT ST_TRANSFORM(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326), 3857);
  19. 梧桐 6.0 替代方案:
  20. -- 变换几何对象的坐标系
    SELECT ST_Transform(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326), 3857);
  21. ST_GEOMFROMGEOJSON(): 从GeoJSON创建几何对象
  22. MySQL 8.0:
  23. -- 从GeoJSON创建几何对象
    SELECT ST_GEOMFROMGEOJSON('{"type": "Point", "coordinates": [48.432044, -71.060316]}');
  24. 梧桐 6.0 替代方案:
  25. -- 从GeoJSON创建几何对象
    SELECT ST_GeomFromGeoJSON('{"type": "Point", "coordinates": [48.432044, -71.060316]}');
  26. ST_ASGEOJSON(): 将几何对象转换为GeoJSON
  27. MySQL 8.0:
  28. -- 将几何对象转换为GeoJSON
    SELECT ST_ASGEOJSON(ST_GeomFromText('POINT(-71.060316 48.432044)'));
  29. 梧桐 6.0 替代方案:
  30. -- 将几何对象转换为GeoJSON
    SELECT ST_AsGeoJSON(ST_GeomFromText('POINT(-71.060316 48.432044)'));
  31. ST_ISVALID(): 检查几何对象是否有效
  32. MySQL 8.0:
  33. -- 检查几何对象是否有效
    SELECT ST_ISVALID(ST_GeomFromText('POINT(-71.060316 48.432044)'));
  34. 梧桐 6.0 替代方案:
  35. -- 检查几何对象是否有效
    SELECT ST_IsValid(ST_GeomFromText('POINT(-71.060316 48.432044)'));
  36. ST_ASTEXT(): 将几何对象转换为文本
  37. MySQL 8.0:
  38. -- 将几何对象转换为文本
    SELECT ST_ASTEXT(ST_GeomFromText('POINT(-71.060316 48.432044)'));
  39. 梧桐 6.0 替代方案:
  40. -- 将几何对象转换为文本
    SELECT ST_AsText(ST_GeomFromText('POINT(-71.060316 48.432044)'));
  41. ST_SRID(): 返回几何对象的空间参考系统标识符
  42. MySQL 8.0:
  43. -- 返回几何对象的空间参考系统标识符
    SELECT ST_SRID(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));
  44. 梧桐 6.0 替代方案:
  45. -- 返回几何对象的空间参考系统标识符
    SELECT ST_SRID(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));
  46. ST_SETSRID(): 设置几何对象的空间参考系统标识符
  47. MySQL 8.0:
  48. -- 设置几何对象的空间参考系统标识符
    SELECT ST_SETSRID(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326), 3857);
  49. 梧桐 6.0 替代方案:
  50. -- 设置几何对象的空间参考系统标识符
    SELECT ST_SetSRID(ST_GeomFromText('POINT(-71.060316 48.432044)', 4326), 3857);
  51. ST_DISTANCE(): 计算两几何对象之间的距离
  52. MySQL 8.0:
  53. -- 计算两几何对象之间的距离
    SELECT ST_DISTANCE(ST_GeomFromText('POINT(-71.060316 48.432044)'), ST_GeomFromText('POINT(-71.055017 48.431664)'));
  54. 梧桐 6.0 替代方案:
  55. -- 计算两几何对象之间的距离
    SELECT ST_Distance(ST_GeomFromText('POINT(-71.060316 48.432044)'), ST_GeomFromText('POINT(-71.055017 48.431664)'));
  56. ST_INTERSECTS(): 检查两几何对象是否相交
  57. MySQL 8.0:
  58. -- 检查两几何对象是否相交
    SELECT ST_INTERSECTS(ST_GeomFromText('POINT(-71.060316 48.432044)'), ST_GeomFromText('POLYGON((0 0, 1 1, 1 0, 0 0))'));
  59. 梧桐 6.0 替代方案:
  60. -- 检查两几何对象是否相交
    SELECT ST_Intersects(ST_GeomFromText('POINT(-71.060316 48.432044)'), ST_GeomFromText('POLYGON((0 0, 1 1, 1 0, 0 0))'));

以上内容涵盖了MySQL 8.0中大部份特有的JSON函数、正则表达式函数和地理空间函数,同时提供了梧桐 6.0版本中的对应替代解决方案。

相关推荐

Python自动化脚本应用与示例(python办公自动化脚本)

Python是编写自动化脚本的绝佳选择,因其语法简洁、库丰富且跨平台兼容性强。以下是Python自动化脚本的常见应用场景及示例,帮助你快速上手:一、常见自动化场景文件与目录操作...

Python文件操作常用库高级应用教程

本文是在前面《Python文件操作常用库使用教程》的基础上,进一步学习Python文件操作库的高级应用。一、高级文件系统监控1.1watchdog库-实时文件系统监控安装与基本使用:...

Python办公自动化系列篇之六:文件系统与操作系统任务

作为高效办公自动化领域的主流编程语言,Python凭借其优雅的语法结构、完善的技术生态及成熟的第三方工具库集合,已成为企业数字化转型过程中提升运营效率的理想选择。该语言在结构化数据处理、自动化文档生成...

14《Python 办公自动化教程》os 模块操作文件与文件夹

在日常工作中,我们经常会和文件、文件夹打交道,比如将服务器上指定目录下文件进行归档,或将爬虫爬取的数据根据时间创建对应的文件夹/文件,如果这些还依靠手动来进行操作,无疑是费时费力的,这时候Pyt...

python中os模块详解(python os.path模块)

os模块是Python标准库中的一个模块,它提供了与操作系统交互的方法。使用os模块可以方便地执行许多常见的系统任务,如文件和目录操作、进程管理、环境变量管理等。下面是os模块中一些常用的函数和方法:...

21-Python-文件操作(python文件的操作步骤)

在Python中,文件操作是非常重要的一部分,它允许我们读取、写入和修改文件。下面将详细讲解Python文件操作的各个方面,并给出相应的示例。1-打开文件...

轻松玩转Python文件操作:移动、删除

哈喽,大家好,我是木头左!Python文件操作基础在处理计算机文件时,经常需要执行如移动和删除等基本操作。Python提供了一些内置的库来帮助完成这些任务,其中最常用的就是os模块和shutil模块。...

Python 初学者练习:删除文件和文件夹

在本教程中,你将学习如何在Python中删除文件和文件夹。使用os.remove()函数删除文件...

引人遐想,用 Python 获取你想要的“某个人”摄像头照片

仅用来学习,希望给你们有提供到学习上的作用。1.安装库需要安装python3.5以上版本,在官网下载即可。然后安装库opencv-python,安装方式为打开终端输入命令行。...

Python如何使用临时文件和目录(python目录下文件)

在某些项目中,有时候会有大量的临时数据,比如各种日志,这时候我们要做数据分析,并把最后的结果储存起来,这些大量的临时数据如果常驻内存,将消耗大量内存资源,我们可以使用临时文件,存储这些临时数据。使用标...

Linux 下海量文件删除方法效率对比,最慢的竟然是 rm

Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...

Python 开发工程师必会的 5 个系统命令操作库

当我们需要编写自动化脚本、部署工具、监控程序时,熟练操作系统命令几乎是必备技能。今天就来聊聊我在实际项目中高频使用的5个系统命令操作库,这些可都是能让你效率翻倍的"瑞士军刀"。一...

Python常用文件操作库使用详解(python文件操作选项)

Python生态系统提供了丰富的文件操作库,可以处理各种复杂的文件操作需求。本教程将介绍Python中最常用的文件操作库及其实际应用。一、标准库核心模块1.1os模块-操作系统接口主要功能...

11. 文件与IO操作(文件io和网络io)

本章深入探讨Go语言文件处理与IO操作的核心技术,结合高性能实践与安全规范,提供企业级解决方案。11.1文件读写11.1.1基础操作...

Python os模块的20个应用实例(python中 import os模块用法)

在Python中,...