【问题标题】:How to select from JSON field in MySQL 5.6 where json_extract is not available?如何从 json_extract 不可用的 MySQL 5.6 中的 JSON 字段中进行选择?
【发布时间】:2017-03-20 03:11:37
【问题描述】:

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

【问题讨论】:

  • 您可以使用正则表达式。但最好的解决方案是规范您的表格设计,这样一开始就没有这样的值。
  • 查看我的另一个answer。这会有所帮助

标签: mysql mysql-5.6


【解决方案1】:

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

我推荐的唯一选项是:

  1. 升级到 MySQL 5.7

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

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

【讨论】:

  • 谢谢,我知道json_extract 不可用(因此标题)。我正在寻找更多 like '%2%' 等效项(或适当的正则表达式)来帮助我匹配行。
  • 我不会愿意选择使用正则表达式来解析 JSON 中的特定字段。为工作使用正确的工具。
  • 有道理。谢谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    Link to source code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 2016-07-20
      • 2010-10-13
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多