首页 > 解决方案 > 在 postgresql 上查询 Json 字段

问题描述

我的数据库 pgsql 上有一个 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 

在此处输入图像描述

标签: sqljsonpostgresql

解决方案


您的屏幕截图有点难以阅读,但您的 JSON 实际上是一个 JSON数组,因此您需要从那里选择第一个元素:

where (datas -> 0 ->> 'localId')::int = 7

或者更短一点:

where (datas #>> '{0,localId}')::int = 7

或者,您可以使用 contains 运算符@>检查是否至少有一个带有 . 的元素localId = 7。但是@>操作员需要jsonb,而不是json,所以你需要转换你的列

where datas::jsonb @> '[{"localId": 7}]'

在线示例


推荐阅读