我有一個模型,其中數據以json格式存儲在postgres的jsonb列中。在jsonb中按日期排序postgres
我想使用activerecord查詢對數據字段的輸出進行排序。
Model.all.order("json_data -> 'date'")
給我一個輸出,但是根據日期字符串按字母順序排序。
有沒有簡單的方法我可以把它作爲約會?
注:日期是按以下格式:
"Fri, 24 Jun 2016 04:13:26 -0700"
我有一個模型,其中數據以json格式存儲在postgres的jsonb列中。在jsonb中按日期排序postgres
我想使用activerecord查詢對數據字段的輸出進行排序。
Model.all.order("json_data -> 'date'")
給我一個輸出,但是根據日期字符串按字母順序排序。
有沒有簡單的方法我可以把它作爲約會?
注:日期是按以下格式:
"Fri, 24 Jun 2016 04:13:26 -0700"
如果日期格式合理,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的回答創建一個額外的列並存儲你的信息。
有一個簡單的辦法可以解決這一個日期嗎?
不作爲jsonb字段的一部分,因爲JSON doesn't know anything about dates。
因此,一個簡單的替代方法是將它們作爲單獨的表格列存儲。
如果你真的必須將它們存儲爲您的JSON域中的元素,那麼我會建議的兩個選項之一:
ISO 8601
格式字符串中。 It would sort correctly,即使它是一個字符串。
問題是,我從其他地方吸收數據(這是一個電子郵件存儲爲JSON),所以我真的不希望有重複分析的字段,如果有辦法保持一切清潔,我可以做所有的解析數據庫端)。 – Carpela
當你這樣做時,你可以爲json字段建立索引並將其轉換爲時間戳,只要你在命令時轉換字段,它就會正確排序。 – Phill