按照jsonb postgres中的日期排序

时间:2016-06-28 10:28:48

标签: ruby-on-rails postgresql activerecord jsonb

我有一个模型,其中数据以json格式存储在postgres的jsonb列中。

我想使用activerecord查询按数据字段对输出进行排序。

Model.all.order("json_data -> 'date'")

给我一​​个输出但是根据日期字符串按字母顺序排序。

我可以通过简单的方式将其作为约会进行排序吗?

注意:日期格式如下:

"Fri, 24 Jun 2016 04:13:26 -0700"

2 个答案:

答案 0 :(得分:3)

如果日期是合理的格式,Postgres会自动处理此事。

Model.all.order("(json_data ->> 'date')::timestamp with time zone DESC")

Model.all.order("(json_data ->> 'date')::timestamptz DESC")

如果您的日期字段字符串有点不正统,则可以执行以下操作

Model.all.order("to_timestamp(json_data->>'date','Dy, DD Mon YYYY HH24:MI:SS ') DESC")

详情here

请注意 - >>那里输出字符串而不是json对象。

您当然可以根据@ Uzbekjon的答案创建一个额外的列并存储您的信息。

答案 1 :(得分:1)

  

有没有一种简单的方法可以将其作为约会进行排序?

不是jsonb字段的一部分,因为JSON doesn't know anything about dates

因此,一个简单的替代方法是将它们存储为单独的表格列。

如果你真的必须将它们存储为你的json字段的元素,那么我会建议两个选项中的一个:

  1. 将您的字段存储为时间戳。因为postgresql中的json字段支持数值,它可以(可能)优化排序。
  2. ISO 8601格式字符串存储您的日期。 It would sort correctly,即使它是一个字符串。