首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从通配符选择MySQL create JSON_OBJECT自动构建?

从通配符选择MySQL create JSON_OBJECT自动构建?
EN

Stack Overflow用户
提问于 2021-09-19 16:52:19
回答 1查看 133关注 0票数 1

不幸的是,MySQL没有提供像这样的函数

代码语言:javascript
复制
SELECT JSON_OBJECT(*) FROM table

现在我想知道是否有人已经编写了一个函数来执行这个任务。我想要实现的是从任何给定表中创建一条返回JSON_OBJECTSELECT *语句。

当然,可以为每个给定表手动创建此表。但我正在寻找一种更通用的方法,在这种方法中,我不需要手动指定所有列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-19 17:35:28

如果没有动态SQL,就无法做到这一点。JSON_OBJECT()接受的参数必须是固定的键/值对。如果需要一个为表的每一列生成一个键的JSON_OBJECT()表达式,那么可以参考INFORMATION_SCHEMA并生成一个表达式列表,然后在动态SQL查询中使用该列表。

示例:

代码语言:javascript
复制
mysql> create table mytable (id serial primary key, name text, created_at datetime);

mysql> insert into mytable set name='Bill', created_at=NOW();

mysql> select * from mytable;
+----+------+---------------------+
| id | name | created_at          |
+----+------+---------------------+
|  1 | Bill | 2021-09-19 17:37:05 |
+----+------+---------------------+

mysql> select concat('select json_object(',
    group_concat(concat(quote(column_name), ', ', column_name)), 
    ') from mytable;') into @sql 
  from information_schema.columns 
  where table_schema = 'test' and table_name = 'mytable';


mysql> select @sql;
+----------------------------------------------------------------------------------+
| @sql                                                                             |
+----------------------------------------------------------------------------------+
| select json_object('id', id,'name', name,'created_at', created_at) from mytable; |
+----------------------------------------------------------------------------------+


mysql> prepare stmt from @sql;

mysql> execute stmt;
+-----------------------------------------------------------------------+
| json_object("id", id,"name", name,"created_at", created_at)           |
+-----------------------------------------------------------------------+
| {"id": 1, "name": "Bill", "created_at": "2021-09-19 17:37:05.000000"} |
+-----------------------------------------------------------------------+
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69245269

复制
相关文章

相似问题

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