如何将存储在字段中的值提取为json。 customerId当前存储在juniferResponse字段中,如{“customerId”:1}
以下内容在我正在使用的mysql版本中不起作用:
SELECT json_extract(juniferResponse, '$.customerId') AS cid FROM enrolment WHERE juniferResponse IS_NOT_NULL;
我需要从juniferResponse中提取字段,该字段不为null或为空。
答案 0 :(得分:0)
如果你不能将MySQL升级到5.7.8或更高。 可以使用下面的选择:
SET @a='{"z":"\\"customerId\\"","customerId":41,"a":1,"b2":2}';
SELECT IF(LOCATE('"customerId":',@a)>0,1*substring(@a,LOCATE('"customerId":',@a)+13),NULL);
如果customerId键不存在,则select返回NULL
13 is the number of letters in the locate string ["customerId":]
或者创建如下的函数。哪个更有用
DELIMITER //
CREATE FUNCTION json_extract_int (jstring TEXT,jkey CHAR(20))
RETURNS INT(11)
BEGIN
SET jkey = CONCAT('"',jkey,'":');
RETURN IF(LOCATE(jkey,jstring)>0,1*substring(jstring,LOCATE(jkey,jstring)+LENGTH(jkey)),NULL);
END//
DELIMITER ;
现在很容易使用
SELECT json_extract_int(@a,'customerId');
+-----------------------------------+
| json_extract_int(@a,'customerId') |
+-----------------------------------+
| 41 |
+-----------------------------------+
或者你的情况
SELECT json_extract_int(juniferResponse,'customerId');
答案 1 :(得分:-1)
如果无法升级mysql服务器以使用json_extract,并且无法在应用程序中使用json_decode,则可以使用MID和LOCATE。 但是你的json必须像{“some_key”:some_number} 您可以使用以下查询:
SELECT
MID(
juniferResponse,
LOCATE(':', juniferResponse) + 1,
LOCATE('}', juniferResponse) - LOCATE(':', juniferResponse) - 1
) AS cid
FROM `exam`
WHERE juniferResponse IS NOT NULL