首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将文本扩展为列?

是否可以将文本扩展为列?
EN

Stack Overflow用户
提问于 2018-04-03 19:24:55
回答 1查看 50关注 0票数 0

具有一个带有长文本类型名称参数的字段的作业表,其格式键为: value,anotherKey: anotherValue中的值为​​。可以通过查询将这些键展开为列。

例如,在params字段中具有以下值

代码语言:javascript
复制
{
    "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"
}

它能否将字段转换为一个结果,其中每个字段对应文本的一个键,值是相应键的值?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-03 23:41:39

嘿..。帮你解决了这个任务!

这是SQLFiddle:http://rextester.com/XNFKU52341

获取您的测试数据:

代码语言:javascript
复制
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\"
}');

实际解决办法:

代码语言:javascript
复制
# 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;

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49637716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档