postgresql - 如何在不指定 postgresql 中的键的情况下将 jsonb 列的所有值更新为相同的值?
问题描述
有一个值如下:
{"111": false, "222": false, "333": false}
如何在不指定键的情况下将其更新为如下?
{"111": true, "222": true, "333": true}
解决方案
json_each()
您可以首先通过为每行提供一个键和值对来分解 JSON 。使用 aCASE
替换false
为true
。然后使用字符串连接组成一个 JSONstring_agg()
并将其转换回json
.
UPDATE json
SET json = (SELECT ('{'
|| string_agg('"'
|| key
|| '": '
|| CASE
WHEN value::text = 'false' THEN
'true'
ELSE
value::text
END,
', ')
|| '}')::json
FROM json_each(json));
或者使用jsonb
变体,如果类型实际上是jsonb
而不是json
.
推荐阅读
- php - PHP if isset 问题
- javascript - 将焦点放在外部反应组件上
- python - PyQt 子部件
- android - 无法解析符号“driveService”
- mongodb - MongoDB 使用位置数组索引更新多个文档
- javascript - 如何在 Adobe Acrobat DC 中定义 JavaScript 脚本中的字符串编码
- json - SQL查询返回包含数组的Json
- c++ - c++ 控制台应用程序,如何在控制台外打印字符
- powershell - Powershell - 将 SQL 与 AD 进行比较
- r - 根据R中不同data.frame的日期间隔平均一列