mysql 5.6的自定义json_extract函数无法按预期工作

时间:2019-03-09 10:00:11

标签: mysql json

我在mysql 5.6上,因此使用自定义函数来扩展json字段。如果每个json字段只有一个值,则工作正常,但如果有多个则失败。

Table extract
user_id,    cb_contactgroup
289,    [{"cb_mobile":"777777777","cb_phonefixedline":"666666666"}]
290,    [{"cb_mobile":"999999999","cb_phonefixedline":"888888888"}]
291,    [{"cb_mobile":"1111111111","cb_phonefixedline":"2222222222"},{"cb_mobile":"3333333333","cb_phonefixedline":"4444444444"}]

对于user_id 291,应该有两行,但只有一行显示如下。

user_id, mobile,    phonefixedline
289,    777777777,  666666666
290,    999999999,  888888888
291,    3333333333, 4444444444

我正在使用以下功能。我不是技术人员,有人可以帮助我纠正以下功能:

ELIMITER $$

DROP FUNCTION IF EXISTS `json_extract_c`$$

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

DELIMITER ;

从查询被选择的地方发布 How to get values from MySQL(5.6) column if that contains json document as string-@user3631341

1 个答案:

答案 0 :(得分:0)

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

Link to source code