如果包含字符串形式的MySQL文档,如何从JSON (5.6)列中获取值
例如,如果我们有一个表- employee,我们有三个列id、name和educations。和列教育包含JSON文档形式的数据
{"ug":"bsc","pg":"mca","ssc":"10th"}我需要教育栏目中的ug和pg的值
我们可以使用MySQL(5.6)查询做到这一点吗?
发布于 2016-06-14 23:51:30
为了能够做你想做的事情,你需要MySQL 5.7.8+。从5.7.8开始,您可以使用JSON_EXTRACT函数从JSON字符串中提取一个值:
SELECT JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name');
+---------------------------------------------------------+
| JSON_EXTRACT('{"id": 14, "name": "Aztalan"}', '$.name') |
+---------------------------------------------------------+
| "Aztalan" |
+---------------------------------------------------------+摘自here。
在JSON5.6中,你不能得到你想要的值,因为MySQL不知道什么是MySQL对象。所以你的选择是:
发布于 2017-05-19 18:03:50
在MySQL 5.6中,默认情况下JSON_EXTRACT不可用。
如果您仍然需要在MySQL 5.6中访问json数据,则需要编写自定义函数。
DELIMITER $$
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 ;这将会有所帮助。我已经创建了它并进行了测试。
发布于 2017-09-07 14:30:25
当JSON文本中没有提到该元素时,上述两个答案对我都不起作用。这是我改进后的函数:
DELIMITER $$
DROP FUNCTION IF EXISTS `json_extract_c`$$
CREATE FUNCTION `json_extract_c`(
details TEXT,
required_field VARCHAR (255)
) RETURNS TEXT CHARSET latin1
BEGIN
DECLARE search_term TEXT;
SET details = SUBSTRING_INDEX(details, "{", -1);
SET details = SUBSTRING_INDEX(details, "}", 1);
SET search_term = CONCAT('"', SUBSTRING_INDEX(required_field,'$.', - 1), '"');
IF INSTR(details, search_term) > 0 THEN
RETURN TRIM(
BOTH '"' FROM SUBSTRING_INDEX(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
details,
search_term,
- 1
),
',"',
1
),
':',
-1
)
);
ELSE
RETURN NULL;
END IF;
END$$
DELIMITER ;https://stackoverflow.com/questions/37816269
复制相似问题