我有一个模型,其中数据以json格式存储在postgres的jsonb列中。
我想使用activerecord查询按数据字段对输出进行排序。
Model.all.order("json_data -> 'date'")
给我一个输出但是根据日期字符串按字母顺序排序。
我可以通过简单的方式将其作为约会进行排序吗?
注意:日期格式如下:
"Fri, 24 Jun 2016 04:13:26 -0700"
答案 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字段的元素,那么我会建议两个选项中的一个:
ISO 8601
格式字符串存储您的日期。 It would sort correctly,即使它是一个字符串。