MySQL获取数组中指定位置的元素内容

  • 前言
  • 一、本文中使用的MySQL函数
  • JSON函数(只有MySql5.7及其以上版本可以使用JSON函数)
  • JSON_EXTRACT(json,path)
  • JSON_UNQUOTE(value)
  • 字符串函数
  • SUBSTRING_INDEX(s,d,n)
  • REVERSE(s)
  • 二、使用示例
  • 方式一:
  • 方式二:



前言

最近在查数据库中的JSON字段时,有这么个需求.需要在数据库端查询数据库中JSON数据类型的字段,这个JSON中的某个value是数组类型的值,最终需要获取到这个数组中的某个位置的元素

在看本文章前需要先了解如何使用MySQL的JSON函数来处理JSON字段.

一、本文中使用的MySQL函数

JSON函数(只有MySql5.7及其以上版本可以使用JSON函数)

参考来源:https://www.cnblogs.com/waterystone/p/5626098.html

JSON_EXTRACT(json,path)

作用:从json文档里抽取数据。如果有参数有NULL或path不存在,则返回NULL。如果抽取出多个path,则返回的数据封闭在一个json array里。

JSON_UNQUOTE(value)

去掉value的双引号。如果val为NULL,则返回NULL

字符串函数

SUBSTRING_INDEX(s,d,n)

返回从字符串 s 的第 n个出现的分隔符 d之后的子串。
如果 n是正数,返回第 n个字符左边的字符串。
如果 n是负数,返回第(n的绝对值(从右边数))个字符右边的字符串。

REVERSE(s)

将字符串s的顺序反过来

二、使用示例

方式一:

用mySQL中的JSON函数,先获取JSON中的数组,利用JSON_EXTRACT函数将数组中指定位置的元素获取出来,此时会带有双引号,使用JSON_UNQUOTE函数去双引号

select
JSON_UNQUOTE(JSON_EXTRACT(JSON_EXTRACT('{"list":["1","2","3"]}','$.list'),'$[2]'))

方式二:

采用字符串截取的方式获取数组内容

select 
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(arra,'"',2)),'"',1)) as arr
from (
SELECT
REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(array,',',1)),',',1)) as arra
FROM ( select JSON_EXTRACT('{"list":["1","2","3"]}','$.list') as array ) as a)
b