如何从 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()
功能不可用。
我唯一推荐的选项是:
升级到MySQL5.7
将整个 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
如果我的行有一个具有以下值的 varchar
:“[1,2,3]
”,如果我需要该值包含其中一个数字,我如何 select 整行(2 还是 3)?
如您所说,您使用的是 MySQL 5.6,因此 JSON_EXTRACT()
功能不可用。
我唯一推荐的选项是:
升级到MySQL5.7
将整个 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