【问题标题】:Make json data descriptive in sql在sql中使json数据具有描述性
【发布时间】:2021-07-15 15:19:10
【问题描述】:

我的 sql 表中有 json 数据,我需要用 sql 中的过程对这些数据进行描述。 样本介绍:

[{"Name":"Adam Smith","OldValue":true,"NewValue":false},
 {"Name":"John Volta","OldValue":"USA","NewValue":"France"},
{"Name":"Eva Camblye","OldValue":160,"NewValue":165}]

样本输出:

Adam Smit old result : true - new result: false , 
John Volta  old result:USA - new result: France ,
Eva Camblye  old result:160 - new result: 165 

我没有关于数据大小和内容的信息。信息可能会改变,但标签(名称、旧值、新值)不会改变。 我怎样才能使它们自动化。

注意:json 数据存储在 nvarchar 中 编辑 2:信息不在单独的行中。它看起来像这样:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=a3d6522b6b9e8c9044250d380b2d73ad

【问题讨论】:

  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 Stack Exchange 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 Stack Exchange 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请参阅:How does deleting work?

标签: mysql sql json


【解决方案1】:
SELECT CONCAT( val->>"$.Name",
               ' old result : ',
               val->>"$.OldValue",
               ' - new result: ',
               val->>"$.NewValue" ) readable
FROM data

单行如下所示: [{"Name":"Adam Smith","OldValue":true,"NewValue":false},{"Name":"John Volta","OldValue":"USA ","NewValue":"France"},{"Name":"Eva Camblye","OldValue":160,"NewValue":165}] 信息不在单独的行中。 – 可以

SELECT CONCAT( jsontable.Name,
               ' old result : ',
               jsontable.OldValue,
               ' - new result: ',
               jsontable.NewValue ) readable
FROM data
CROSS JOIN JSON_TABLE ( data.val,
                        "$[*]" COLUMNS ( Name VARCHAR(255) PATH "$.Name",
                                         OldValue VARCHAR(255) PATH "$.OldValue",
                                         NewValue VARCHAR(255) PATH "$.NewValue") ) jsontable

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=ba6e544d5fbc30f2686dc6e42f50f774

【讨论】:

  • 信息不在单独的行中。它看起来像这样:dbfiddle.uk/…
  • 感谢您的努力,但这对我不起作用。 json 值不在单独的行中。它看起来像这样:dbfiddle.uk/…
  • @Can o_O 我为这个选择添加了一个查询 - 仔细看。 PS。您的小提琴中的 JSON 是错误的 - 第二个和第三个对象之间的逗号丢失了。聚苯乙烯。多余的空格和换行符不会影响输出 - 在 JSON 中它们会被忽略。
猜你喜欢
  • 1970-01-01
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
相关资源
最近更新 更多