如何从 MySQL 5.6 中的 JSON 字段 select,其中 json_extract 不可用?

How to select from JSON field in MySQL 5.6 where json_extract is not available?

如果我的行有一个具有以下值的 varchar:“[1,2,3]”,如果我需要该值包含其中一个数字,我如何 select 整行(2 还是 3)?

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

我唯一推荐的选项是:

  1. 升级到MySQL5.7

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

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

您可以在 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 ;

因为我需要 mysql 5.6 上的 JSON_EXTRACT 我自己写了一个原始函数的副本,可以像 mysql 5.7[=11= 中的本机函数一样提取值]

Link to source code