sql - 在 postgresql 上查询 Json 字段
问题描述
我需要使用 localId 搜索键,我尝试了这个查询:
SELECT *
FROM public.translations
where datas->>'localId' = 7;
SELECT *
FROM public.translations
where datas->>'localId'::text = '7';
没结果。
请问我该怎么做?
当我进行此查询时,我没有任何值
SELECT datas->>'localId' as local
FROM public.translations
SELECT datas::json->>'localId' as local
FROM public.translations
解决方案
您的屏幕截图有点难以阅读,但您的 JSON 实际上是一个 JSON数组,因此您需要从那里选择第一个元素:
where (datas -> 0 ->> 'localId')::int = 7
或者更短一点:
where (datas #>> '{0,localId}')::int = 7
或者,您可以使用 contains 运算符@>
检查是否至少有一个带有 . 的元素localId = 7
。但是@>
操作员需要jsonb
,而不是json
,所以你需要转换你的列
where datas::jsonb @> '[{"localId": 7}]'
推荐阅读
- excel - 如何将文件保存到当年的文件夹?
- ios - App Store Connect 拒绝发布“Info.plist 中缺少目的字符串”的应用程序发布,但该应用程序不需要这些权限
- xaml - 无法将图像绑定到 Xamarin 表单中的 ListView
- javascript - 如何处理缓慢的 jQuery addClass 效果?
- node.js - 写入密码时出现 authTagLength 错误
- reactjs - 如何使用我的输入值更新 api 结果?
- amazon-web-services - 如何将调用方 IAM 策略应用于 lambda 函数执行?
- node.js - socket.io - 引擎错误握手以传输 websocket
- c++ - 将结构化绑定与“类元组”绑定协议一起使用时的标识符类型
- node.js - 写入磁盘的 NodeJS 不需要的字符