如何从MySQL 5.6中的JSON字段中选择json_extract不可用?

问题描述 投票:3回答:3

如果我的行有一个带有以下值的varchar:“[1,2,3]”,如果我需要包含其中一个数字(a 2或3)的值,我怎么能选择整行?

mysql mysql-5.6
3个回答
4
投票

正如您所说,您使用的是MySQL 5.6,因此JSON_EXTRACT()功能不可用。

我建议的唯一选择是:

  1. 升级到MySQL 5.7
  2. 将整个JSON文档提取到应用程序中并使用JSON解码功能。

您也可以尝试使用其他string functions available in MySQL 5.6解析JSON,但开发会很麻烦且耗时。


1
投票

您可以在sql中创建该函数

DELIMITER $$
DROP FUNCTION IF EXISTS `json_extract_c`$$

CREATE FUNCTION `json_extract_c`(
 details TEXT,
 required_field VARCHAR (255)
) RETURNS TEXT CHARSET latin1
BEGIN
SET details = SUBSTRING_INDEX(details, "{", -1);
SET details = SUBSTRING_INDEX(details, "}", 1);
RETURN TRIM(
BOTH '"' FROM SUBSTRING_INDEX(
    SUBSTRING_INDEX(
        SUBSTRING_INDEX(
            details,
            CONCAT(
                '"',
                SUBSTRING_INDEX(required_field,'$.', - 1),
                '":'
            ),
            - 1
        ),
        ',"',
        1
    ),
    ':',
    -1
  )
) ;
END$$

DELIMITER ;

0
投票

因为我在mysql 5.6上需要一个JSON_EXTRACT我自己写了一个原始函数的副本,它可以提取像mysql 5.7中的本机函数之类的值

Link to source code

© www.soinside.com 2019 - 2024. All rights reserved.