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

时间:2016-11-06 20:05:17

标签: mysql mysql-5.6

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

3 个答案:

答案 0 :(得分:4)

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

我建议的唯一选择是:

  1. 升级到MySQL 5.7

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

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

答案 1 :(得分: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 ;

答案 2 :(得分:0)

因为我需要在mysql 5.6上使用JSON_EXTRACT,所以我自己写了一个原始函数的副本,该函数可以提取值,例如mysql 5.7中的本机函数。

Link to source code