【问题标题】:How can I remove string from json coulmn如何从 json 列中删除字符串
【发布时间】:2021-12-27 19:59:35
【问题描述】:

我在一个名为 areas 的表中有 600 行,其中包含三个内容 id, name, created_at 名称列如下所示:

{"ar": "سفين", "en": "Safeen"}
{"ar": "شورش", "en": "Shorsh"}
.....

我只想保留 ar 的名称并删除其他任何内容:

{"ar": "سفين", "en": "Safeen"} => سفين

有什么查询可以做这样的事情吗?

我的数据库是 MYSQL

【问题讨论】:

  • 你必须指定是SQL还是MySQL(在标签中)
  • @Ergis Mysql 作为数据库
  • @JeffHolt 我已经看到了这个解决方案,但这不是我需要的。我需要修剪 JSON,只保留 ar 名称并删除其他任何内容,当然,我已将列的类型更改为 varchar(255)

标签: mysql sql


【解决方案1】:

你可以使用JSON_ExTRAC

Bill Karmin 还提到要删除文本周围的引号,您可以使用 JSON_UNQUOTE

正如他所说,这些功能仅在 MySQL 5.7 之后可用

CREATE TABLE mytable(tx  TEXT)
INSERT INTO mytable VALUES ('{"ar": "سفين", "en": "Safeen"}'),('{"ar": "شورش", "en": "Shorsh"}')
UPDATE mytable SET tx =  JSON_UNQUOTE(JSON_EXTRACT(tx, '$.ar'))
SELECT * FROM mytable
|交易 | | :------- | | سفين | | شورش |

db小提琴here

【讨论】:

  • 您可能也想使用JSON_UNQUOTE()。请注意,这些函数需要 MySQL 5.7 或更高版本。
  • 谢谢我添加了信息
  • UPDATE mytable SET tx = JSON_UNQUOTE(JSON_EXTRACT(tx, '$.ar')) 工作完美,谢谢
  • @ser -1 为您服务。这实际上是您所说的post 的第一个答案是无用的(减去JSON_UNQUOTE 部分)。
【解决方案2】:

你可以使用

SELECT name.ar FROM areas

如果您已将name 定义为JSON 数据类型

【讨论】:

  • 我需要修剪 JSON,只保留 ar 名称并删除其他任何内容,当然,我已将列的类型更改为 varchar(255) –
  • SELECT id, name.ar, created_at FROM areas的结果就是你需要的表
  • @jbosch 你从哪里得到那个语法?它在 MySQL 中不能用于查询 JSON 文档的字段。
猜你喜欢
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多