按JSON数据类型postgres排序

use*_*105 21 postgresql json

我有一个Postgres表,其中包含JSON类型的列,其中包含一堆JSON对象.我想查询表记录并按存储在JSON字段中的值对结果进行排序.我正在运行查询,但它们没有正确排序.我没有找到关于专门订购JSON字段类型的大量文档,所以希望有人遇到过这种情况.

data: {name: "stuff", value: "third option"}
data: {name: "stuff", value: "awesome stuff"}
data: {name: "stuff", value: "way cooler stuff"}
Run Code Online (Sandbox Code Playgroud)

以下SQL执行但结果返回无序

select * from table ORDER BY data->>'value asc' 
Run Code Online (Sandbox Code Playgroud)

我正在使用rails,但尝试直接运行SQL同样的结果

Cra*_*ger 40

asc输入了fieldname.value asc在json中没有命名的键,因此data ->> 'value asc'将始终返回NULL.

你真的想要:

select * from table ORDER BY data->>'value' ASC 
Run Code Online (Sandbox Code Playgroud)

匹配json,甚至可能:

select * 
from table 
WHERE data ->> 'name' = 'stuff'
ORDER BY data->>'value' ASC 
Run Code Online (Sandbox Code Playgroud)

  • 这应该如何与整数一起工作?它们似乎被排序为字符串:``1, 10, 46, 6`` 而不是``1, 6, 10, 46`` (2认同)

aco*_*hen 14

使用->而不是->>(->>获取JSON对象字段作为文本):

select * from my_table ORDER BY data->'some_number' asc; 
Run Code Online (Sandbox Code Playgroud)

  • 虽然这确实直接回答了这个问题,但我很感激我发现了这一点。它帮助我解决了 JSON 列在为数字时按字母顺序排序的问题。 (2认同)

小智 12

尝试:

ORDER BY cast(data->>'value' as integer) ASC