Mysql 是否可以将文本展开为列?
有一个jobs表,其字段的名称参数为longtext类型,且具有值在格式键:值中,另一个键:另一个值。可以通过查询将这些键扩展到列 例如,在params字段中具有以下值Mysql 是否可以将文本展开为列?,mysql,Mysql,有一个jobs表,其字段的名称参数为longtext类型,且具有值在格式键:值中,另一个键:另一个值。可以通过查询将这些键扩展到列 例如,在params字段中具有以下值 { "field964" : "Value", "field966" : "Value", "field967" : "Value", "field968" : "Value", "field969" : "Value", "field970" : "Value", "
{
"field964" : "Value",
"field966" : "Value",
"field967" : "Value",
"field968" : "Value",
"field969" : "Value",
"field970" : "Value",
"field971" : "Value",
"field972" : "Value",
"field973" : "Value",
"field974" : "Value",
"field975" : "Value",
"field976" : "Value",
"field977" : "Value",
"field978" : "Value",
"field979" : "Value",
"field980" : "Value",
"field981" : "Value",
"field982" : "Value"
}
它能否将字段转换为一个结果,其中每个字段对应文本的一个键,而值是对应键的值
提前谢谢呵呵。。。为你解决了这个任务 这是SQLFiddle: 获取您的测试数据:
CREATE TABLE t20_table (value JSON);
INSERT INTO t20_table VALUES ('{
"field964" : \"Value1\",
"field966" : \"Value2\",
"field967" : \"Value3\",
"field968" : \"Value4\",
"field969" : \"Value5\",
"field970" : \"Value6\",
"field971" : \"Value7\",
"field972" : \"Value8\",
"field973" : \"Value9\",
"field974" : \"Value10\",
"field975" : \"Value11\",
"field976" : \"Value12\",
"field977" : \"Value13\",
"field978" : \"Value14\",
"field979" : \"Value15\",
"field980" : \"Value16\",
"field981" : \"Value17\",
"field982" : \"Value18\"
}');
实际解决方案:
# generate range between 0 and N - number of keys
CREATE TABLE incr (id INTEGER PRIMARY KEY AUTO_INCREMENT);
CREATE PROCEDURE xrange(value INTEGER)
BEGIN
DECLARE v1 INT DEFAULT 0;
WHILE v1 < value DO
INSERT incr VALUES (NULL);
SET v1 = v1 + 1;
END WHILE;
END;
SET @keys = (SELECT JSON_KEYS(value) FROM t20_table);
SET @length = (SELECT JSON_LENGTH(value->"$.*") FROM t20_table);
# generating number range from 0 to @length
CALL xrange(@length);
# generate SELECT statement with JSON_EXTRACT
SELECT GROUP_CONCAT('JSON_EXTRACT(value->"$.*", ', '"$[', id - 1,']") AS ', JSON_EXTRACT(@keys, CONCAT("$[", id - 1, "]")), '')
INTO @query
FROM incr;
SELECT @query;
SET @query = CONCAT('SELECT ', @query, ' FROM t20_table;');
PREPARE q FROM @query;
EXECUTE q;
输出:
你能使用客户端编程语言吗?该值是JSON,因此您可以在PHP、Python、Javascript等中使用JSON解析器。感谢您的回答,您的建议是我计划要做的,但我想知道是否可以在数据库管理器中轻松完成。它类似于数据透视表,但更难,因为没有像这样简单的方法来解析文本。MySQL 5.7添加了JSON数据类型,但我认为它没有任何函数来枚举对象的键。我理解,我只是想澄清这个疑问。谢谢你抽出时间。巴尔马