你可以用
JSON_SEARCH
找到用户所需语言的路径,例如。
SELECT JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')
这将返回类似于
"$[1].lng"
. 那你可以
JSON_UNQUOTE
价值和用途
SUBSTRING_INDEX
.
,即。
$[1]
. 然后可以将其用作
JSON_EXTRACT
与连接时
.zone_name
SELECT JSON_EXTRACT(@a, CONCAT(SUBSTRING_INDEX(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.', 1), '.zone_name'))
输出:
"Zone B ENG"
Demo on dbfiddle
注意输出值周围有双引号,您可能需要删除那些
JSON引用
为了得到
Zone B ENG
还请注意,您可以使用
REPLACE
替换
.lng
具有
.区域名称
:
SELECT JSON_EXTRACT(@a, REPLACE(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.lng', '.zone_name'))
Demo on dbfiddle
JSON_TABLE
创造生命的功能
更容易的:
SELECT *
FROM JSON_TABLE(@a,
"$[*]" COLUMNS(
lng VARCHAR(4) PATH "$.lng",
zone_name VARCHAR(20) PATH "$.zone_name",
zone_location VARCHAR(20) PATH "$.zone_location",
about_zone VARCHAR(20) PATH "$.about_zone"
)
) AS j
WHERE lng = 'eng'
输出:
lng zone_name zone_location about_zone
eng Zone B ENG Zone B Location ENG About Zone EN
Demo on dbfiddle